Sfogliata la documentazione e non sono riuscito a trovare nulla per modificare il colore di UISearchBar. Qualcuno sa come cambiarlo? Non c'è alcuna proprietà textColor:/Colore testo UISearchBar
Thx
Sfogliata la documentazione e non sono riuscito a trovare nulla per modificare il colore di UISearchBar. Qualcuno sa come cambiarlo? Non c'è alcuna proprietà textColor:/Colore testo UISearchBar
Thx
Ho il sospetto che si potrebbe usare tecniche descritte nel this post
modificando il codice presentato lì un po ', si sottoclasse UISearchBar:
@interface SearchBar : UISearchBar {
}
@end
Poi nella tua implementazione:
- (void)layoutSubviews {
UITextField *searchField;
NSUInteger numViews = [self.subviews count];
for(int i = 0; i < numViews; i++) {
if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
searchField = [self.subviews objectAtIndex:i];
}
}
if(!(searchField == nil)) {
searchField.textColor = [UIColor redColor];
}
[super layoutSubviews];
}
Non ho testato né il codice del post originale né questo codice, ma sembra che dovrebbe funzionare. -wkw
È possibile effettuare le seguenti operazioni: Basta ottenere la proprietà searchField dal SearchBar e quindi modificare la proprietà textColor.
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.
Questo è tutto! Ora puoi manipolare il campo testo in qualsiasi modo possibile.
Spero che questo abbia aiutato. – GeoExperts
Sì, è il modo più semplice per farlo, grazie mille – Burjua
Non è un metodo privato? – dacopenhagen
Ecco una categoria che aggiunge questa funzionalità:
@implementation UISearchBar (UISearchBar_TextColor)
- (UITextField *)field {
// HACK: This may not work in future iOS versions
for (UIView *subview in self.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
return (UITextField *)subview;
}
}
return nil;
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
Non ha funzionato in iOS7, perché UITextField viene spostato più in profondità nella gerarchia. Questo funziona: // HACK: Questo potrebbe non funzionare nelle future versioni di iOS per (UIView * visualizzazione secondaria in bar.subviews) {if ( [isKindOfClass visualizzazione secondaria: [class] UITextField]) { ritorno (UITextField *) visualizzazione secondaria ; } else { per (UIView * subview2 in subview.subviews) { if ([subview2 isKindOfClass: [UITextField class]]) { return (UITextField *) subview2; } } } } –
Nuovi sviluppatori ios, questa non è la risposta da selezionare quando Apple fornisce l'API per l'impostazione delle proprietà di aspetto. Andare a fondo nelle sottoview non è quasi mai la soluzione giusta. – hhanesand
Ecco un approccio più pulito:
UITextField *searchField = nil;
for (UIView *v in self.searchBar.subviews)
{
if ([v isKindOfClass:[UITextField class]])
{
searchField = (UITextField *)v;
break;
}
}
if (searchField)
{
searchField.textColor = [UIColor whiteColor];
}
iOS 8: Vedere https://stackoverflow.com/a/28183058/308315
iOS 6/7:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
La migliore risposta possibile è la – Fraser
Funziona su iOS 7 e versioni successive:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15]
}];
È possibile rimuovere anche l'attributo non utilizzato.
UPDATE. A causa appearanceWhenContainedIn
è deprecato in iOS 9, vedere la risposta del Dishant di seguito: https://stackoverflow.com/a/38893352/2799722
perfetta per iOS 8. – ashForIos
modifica la categoria suggerita da David Foster (@ david-Foster) per lavorare su iOS 8.
static UITextField *PBFindTextFieldInView(UIView *view) {
for(UIView *subview in view.subviews) {
if([subview isKindOfClass:UITextField.class]) {
return (UITextField *)subview;
} else {
UITextField* textField = PBFindTextFieldInView(subview);
if(textField) {
return textField;
}
}
}
return nil;
}
@implementation UISearchBar (Appearance)
- (UITextField *)field {
return PBFindTextFieldInView(self);
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
appearanceWhenContainedIn è deprecato in iOS 9, quindi dobbiamo usare il metodo seguente per iOS 9 e versioni successive.
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
Con iOS 11 la barra di ricerca è destinato a diventare parte della barra di navigazione, che, come ci si potrebbe aspettare, aggiunge tutti i tipi di nuove "funzionalità".
Penso che sia un errore, ma ho scoperto che avevo bisogno di fare quanto segue per modificare il testo (e pulsante di annullamento) Colore:
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
ho scoperto che il bar in stile, quando a sinistra per "default , "renderebbe il testo nero indipendentemente dal colore della tinta, ecc.Se impostato su Minimo o Prominente, il testo era visibile.
Per iOS11, ho trovato questo ha funzionato:
Dopo aver impostato il searchController
nel navigationItem
, il testo di ricerca era nero su nero. Per renderlo bianco, ho dovuto fare:
searchController.searchBar.barStyle = .blackTranslucent
Era l'unica cosa che ha funzionato per me. La mia applicazione ha una barra di navigazione trasparente per lasciare lo sfondo sfumato mostrare attraverso, e sto indovinando il SearchBar assume che l'aspetto dato che le mie impostazioni di visualizzazione per UISearchBar
sono stati largamente ignorati con una sola eccezione:
UISearchBar.appearance().tintColor = UIColor.red
Ciò ha reso il pulsante Annulla e il cursore di inserimento del testo rosso. Il testo segnaposto era grigio chiaro.
Si noti che: UISearchBar.appearance().barStyle = .blackTranslucent
non ha funzionato - doveva essere impostato sull'istanza. Anche questo non ha avuto alcun effetto visibile sulla barra di ricerca (era ancora trasparente come la barra di navigazione); ha appena reso bianco il testo di ricerca.
Dopo aver impostato il searchController
nella navigationItem
per iOS 11, ho trovato che il tentativo di impostare la textColor
via UIAppearance
per qualsiasi UITextField
all'interno di un UISearchBar
non ha avuto effetto, ma una proprietà aspetto personalizzata che chiama semplicemente il regolare textColor
funzionato bene.
// Implement a custom appearance property via a UITextField category
@interface UITextField (SearchBarTextColor)
@property (nonatomic, strong) UIColor * textColorWorkaround UI_APPEARANCE_SELECTOR;
@end
@implementation UITextField (SearchBarTextColor)
- (UIColor *)textColorWorkaround {
return self.textColor;
}
- (void)setTextColorWorkaround:(UIColor *)textColor {
self.textColor = textColor;
}
@end
e quindi utilizzare come segue:
UITextField *textFieldProxy = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class]];
textFieldProxy.textColorWorkaround = UIColor.lightGrayColor;
P.S. Lo stesso trucco mi ha aiutato a colorare le etichette apparentemente inaccessibili di UIDatePicker
e UIPickerView
Frickin folle ci vuole così tanto hacking per cambiare il colore del testo di una barra di ricerca, forza mela! –