2012-05-23 2 views

risposta

19

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]]; 
+0

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. –

11

Come di iOS 5, il modo giusto per farlo è usare il protocollo aspetto.

Ad esempio:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]]; 
+1

Ottima risposta. Grazie – Nekto

2

È 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

2

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]];