È possibile modificare il colore del testo della barra di ricerca? Non mi sembra di avere accesso alla classe UISearchBarTextField ...Cambia il colore del testo della barra di ricerca ios
risposta
in primo luogo, a trovare la visualizzazione secondaria in UISearchBar
, poi trovare il UITextField
in sub View poi cambiare colore
Prova di questo codice: -
for(UIView *subView in searchBar.subviews){
if([subView isKindOfClass:UITextField.class]){
[(UITextField*)subView setTextColor:[UIColor blueColor]];
}
}
per ios 5 +
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]];
Come di iOS 5, il modo giusto per farlo è usare il protocollo aspetto.
Ad esempio:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]];
Ottima risposta. Grazie – Nekto
È possibile impostare gli attributi in questo modo, chiamare questo nel controller.
[[UITextField appearanceWhenContainedIn:[self class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont systemFontOfSize:14]}];
* notare che questo cambierà tutti UITextFields nel controller
La gerarchia originale UISearchBar
è cambiato da quando il post originale e la UITextField
non è più una visualizzazione secondaria diretta. Il codice seguente non fa ipotesi sulla gerarchia UISearchBar
.
Questo è utile anche quando non si desidera modificare il colore del testo della barra di ricerca nell'intera applicazione (ad esempio utilizzando appearanceWhenContainedIn).
/**
* A recursive method which sets all UITextField text color within a view.
* Makes no assumptions about the original view's hierarchy.
*/
+(void) setAllTextFieldsWithin:(UIView*)view toColor:(UIColor*)color
{
for(UIView *subView in view.subviews)
{
if([subView isKindOfClass:UITextField.class])
{
[(UITextField*)subView setTextColor:color];
}
else
{
[self setAllTextFieldsWithin:subView toColor:color];
}
}
}
Usage:
[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]];
Facendo in questo modo probabilmente funzionerà, ma è fragile nel caso in cui Apple decide di giocare con la gerarchia della vista, vedere la mia soluzione qui di seguito utilizzando il protocollo aspetto. –