2012-05-23 14 views

Respuesta

19

primer lugar, se encuentra la subvista en UISearchBar, y luego encontrar el UITextField en sub Ver a continuación, cambiar de color

Prueba este código: -

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

para iOS 5 +

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

Hacerlo de esta manera probablemente funciona, pero se puede romper en el caso de la manzana decide jugar con la jerarquía de la vista, por favor ver mi solución a continuación utilizando el protocolo apariencia. –

11

a partir de iOS 5, la forma correcta de hacerlo es usando el protocolo apariencia.

Por ejemplo:

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

Gran respuesta. Gracias – Nekto

2

Es posible ajustar los atributos como tal, llamar a esto en su controlador.

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

* tenga en cuenta que esto va a cambiar todos los UITextFields en su controlador

2

La jerarquía original de UISearchBar ha cambiado desde el post original y la UITextField ya no es una subvista directa. El código siguiente no hace suposiciones sobre la jerarquía UISearchBar.

Esto también es útil cuando no desea cambiar el color del texto de la barra de búsqueda en toda la aplicación (es decir, usando 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]; 
     } 
    } 
} 

Uso:

[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]]; 
Cuestiones relacionadas