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];
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. –
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