2012-05-23 16 views

Odpowiedz

19

po pierwsze, znaleźć podrzędny w UISearchBar, następnie znaleźć UITextField w sub View następnie zmienić kolor

Spróbuj kod: -

for(UIView *subView in searchBar.subviews){ 
      if([subView isKindOfClass:UITextField.class]){ 
       [(UITextField*)subView setTextColor:[UIColor blueColor]]; 
      } 
     } 

dla iOS 5 +

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

Robi to w ten sposób prawdopodobnie będzie działać, ale jest krucha w przypadku, jabłko zdecyduje się grać z hierarchią widoku, proszę zobaczyć moje rozwiązanie poniżej przy użyciu protokołu wygląd. –

11

w iOS 5, właściwy sposób to zrobić przy użyciu protokołu wygląd.

Na przykład:

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

Świetna odpowiedź. Dzięki – Nekto

2

Można ustawić atrybuty jak tak, to nazywamy to w kontrolerze.

[[UITextField appearanceWhenContainedIn:[self class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont systemFontOfSize:14]}]; 

* pamiętać, że to się zmieni wszystkie UITextFields w kontrolerze

2

Oryginalny UISearchBar hierarchia zmieniła się od oryginalnego postu i UITextField nie jest bezpośrednim subview. Poniższy kod nie zawiera żadnych założeń dotyczących hierarchii UISearchBar.

Jest to przydatne również wtedy, gdy nie chcesz zmieniać koloru tekstu paska wyszukiwania w całej aplikacji (np. Za pomocą 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]; 
     } 
    } 
} 

Zastosowanie:

[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]]; 
Powiązane problemy