2012-05-23 3 views

ответ

19

во-первых, вы найдете подвид в UISearchBar, а затем найти UITextField в подэкранном View затем изменить цвет

Попробуйте этот код: -

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

для Ios 5 +

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

делая это таким образом, вероятно, будет работать, но хрупким в случае яблоко решает играть с точки зрения иерархии, пожалуйста, см мое решение ниже с использованием протокола внешнего вида. –

11

с прошивкой 5, правильный способ сделать это с помощью протокола внешнего вида.

Например:

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

Отличный ответ. благодаря – Nekto

2

Вы можете установить атрибуты, как это так, называем это в контроллере.

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

* обратите внимание, что это изменит все UITextFields в контроллере

2

оригинальный UISearchBar иерархия не изменилась исходным сообщение и UITextField больше не является прямой подтаблица. В приведенном ниже коде не делается никаких предположений об иерархии UISearchBar.

Это также полезно, если вы не хотите менять цвет текста строки поиска во всем приложении (т. Е. Используя 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]; 
     } 
    } 
} 

Использование:

[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]]; 
Смежные вопросы