2012-06-16 20 views
12

En mi aplicación para iPhone iOS5, estoy estableciendo el tono de color de la barra de búsqueda usando el código siguiente:IOS - Personalización del botón Cancelar UISearchBar

searchBar.tintColor = UIColorMake(@"#EFEFEF"); 

valor RGB de #efefef es (239239239)
Su funcionamiento multa. Pero cuando aparece el botón cancelar, el texto "Cancelar" no está visible. ¿Puedo personalizar solo el botón Cancelar con texto transparente en blanco y negro?
¿es posible personalizar?

+0

He escrito una respuesta a este tema aquí : http://stackoverflow.com/questions/19206757/how-to-change-textcolor-of-cancel-button-of-uisearchbar-in-ios7. Solo usa SHSearchBar que no es tan doloroso como UISearchBar. – blackjacx

Respuesta

5

Se podría buscar UISearchBar subvistas y localizar el botón de cancelación, es peligroso hacerlo, ya que el botón podría cambiar Por ejemplo, podría añadir esto en su viewWillAppear

- (void) viewWillAppear:(BOOL)animated 
{ 
    //show the cancel button in your search bar 
    searchBar.showsCancelButton = YES; 
    //Iterate the searchbar sub views 
    for (UIView *subView in searchBar.subviews) { 
     //Find the button 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      //Change its properties 
      UIButton *cancelButton = (UIButton *)[sb.subviews lastObject]; 
      cancelButton.titleLabel.text = @"Changed"; 
     } 
    } 
} 

Como he dicho antes de este podría cambiar, es un truco para hacerlo, mejor quedarse con el original, o crear su propia barra de búsqueda.

+1

en ios 7 no está buscando ninguna subvista – NSCry

+0

Esto no es aconsejable y desde iOS 5 la mejor manera de manejar esto es con el proxy de aparición como Marián Černý describe en su respuesta. –

4

Desde IOS5 puede editar el navigationbar, barra de herramientas, Tabbar y algunos más con el código ...

NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys: 
              [UIColor darkGrayColor], 
              UITextAttributeTextColor, 
              [UIColor whiteColor], 
              UITextAttributeTextShadowColor, nil]; 
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; 

que no he probado con una barra de búsqueda, pero debería funcionar similar.

+0

No, no es así. Si observa la documentación de apariencia para la barra de búsqueda, no proporciona un controlador claro para cambiar los atributos del botón de búsqueda. – csotiriou

42

Puede personalizar el botón Cancelar en iOS 5 utilizando el proxy de apariencia. Debe cambiar la apariencia de UIBarButtonItem cuando está en UISearchBar. Por ejemplo, para cambiar el tipo de letra del título del botón Cancelar que puede utilizar:

NSDictionary *attributes = 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor whiteColor], UITextAttributeTextColor, 
    [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5], UITextAttributeTextShadowColor, 
    [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
    [UIFont systemFontOfSize:12], UITextAttributeFont, 
    nil]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateHighlighted]; 
+5

ESTA debería ser la respuesta aceptada. No es hacky, está claro, y funciona. La respuesta actualmente aceptada podría romperse en cualquier momento. – csotiriou

+1

Esto es ideal para cambiar el texto del botón, pero ¿cómo se cambia el botón? por ejemplo, cambie el tamaño del botón –

+1

Desafortunadamente, UISearchBar también contiene un botón Borrar (círculo gris con una x adentro) por lo que si cambia la imagen de fondo del botón Cancelar utilizando este método, el botón Borrar también se verá afectado ... –

0

Este método funciona en iOS7

for (UIView *view in searchBar.subviews) 
    { 
     for (id subview in view.subviews) 
     { 
      if ([subview isKindOfClass:[UIButton class]]) 
      { 
       // customize cancel button 
       UIButton* cancelBtn = (UIButton*)subview; 
       [cancelBtn setEnabled:YES]; 
       break; 
      } 
     } 
    } 

Marque esta https://stackoverflow.com/a/18150826/1767686

Cuestiones relacionadas