2009-11-19 21 views
9

Cuando aparezca el teclado, que quieren establecer eliPhone UISearchBar y keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

He comprobado la documentación y parece que sólo se puede cambiar la KEYBOARDTYPE.

¿Es posible hacerlo sin violar ninguna de las privadas de la API de Apple?

Respuesta

-2

keyboardAppearance es una propiedad de la UITextInputTraitsProtocol, lo que significa que la propiedad se establece a través del objeto TextField. No sé qué es un teclado Alert, desde el SDK es un teclado adecuado para una alerta.

así es como se accede a la propiedad:

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

Ahora, cuando el usuario toca el terreno de texto y el teclado aparece, debería ser lo que quieres.

+1

Olvidaste el hecho de que esto viene de un UISearchBar y no de un UITextField. El UIKeyboardAppearanceAlert tiene un fondo transparente, que quiero seguir la misma a lo largo de toda mi aplicación. Esto se puede lograr como lo ha demostrado en UITextFields, sin embargo, UISearchBar también tiene un campo de texto dentro. Quería saber si es posible establecer la apariencia del teclado para este campo de texto. –

+0

Mi mal. En los documentos, parece que no hay una propiedad o método para establecer la transparencia del teclado en la clase UISearchBar. Solo puedes configurar el tipo de teclado. – Justin

27

Esto debe hacerlo:

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 

No se encontró ninguna otra forma de hacer ...

+0

Confirmo: funciona: o) No encontré otra forma de obtenerlo. Esta respuesta debe ser aceptada. – CedX

+0

supongo que esto funciona, pero he encontrado una solución diferente, más simple aquí: http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax: va a asociar a una solución de la KEYBOARDTYPE (defecto, ASCII, números ...), pero se trata de la keyboardAppearance (claro, oscuro) – auco

9

Esto ya no funciona en iOS 7, porque la jerarquía de vistas UISearchBar ha cambiado. El UITextView ahora es una subvista de la primera subvista (por ejemplo, está en la matriz searchBar.subviews[0].subviews).

Una manera más futura de hacerlo sería revisar recursivamente toda la jerarquía de vistas y comprobar el protocolo UITextInputTraits en lugar de UITextField, ya que eso es lo que realmente declara el método. Una forma limpia de hacer esto es usar categorías. En primer lugar hacer una categoría en UISearchBar que añade este método:

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

A continuación, añada una categoría en UIView que añade este método:

- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro { 
    for (UIView *sub in self.subviews) 
     if ([sub conformsToProtocol: pro]) 
      return sub; 

    for (UIView *sub in self.subviews) { 
     UIView *ret = [sub firstSubviewConformingToProtocol: pro]; 
     if (ret) 
      return ret; 
    } 

    return nil; 
} 

Ahora puede establecer la apariencia del teclado en la barra de búsqueda en la misma manera que lo haría un campo de texto:

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

gracias, ¡muy útil! Creo que hay un pequeño error tipográfico: "[sub subviewConformingToProtocol: pro]" debería ser "[sub firstSubviewConformingToProtocol: pro]" – auco

+0

@auco gracias, corrigió eso! – stonemonk

35

La mejor manera que he encontrado para hacer esto, si quieres hacerlo a través de su aplicación, es utilizar Aparición en UITextField. Pon esto en tu AppDelegate en el lanzamiento.

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

¡El truco para mí, gracias! – Funkycochise

+0

Mucho mejor camino ahora! Gracias – iGranDav

+0

Eso lo hizo por mí también. En iOS7. Aunque la idea de la categoría, a continuación, se ve bien. –

Cuestiones relacionadas