Questo non funziona più su iOS 7 perché la gerarchia vista UISearchBar è cambiato. UITextView è ora una sottoview della prima sottoview (ad es. È nell'array searchBar.subviews[0].subviews
).
Un futuro modo più prova per farlo sarebbe quello di controllare in modo ricorsivo l'intera gerarchia vista, e per verificare UITextInputTraits
protocollo piuttosto che UITextField
, dal momento che questo è ciò che in realtà dichiara il metodo. Un modo pulito per farlo è usare le categorie. Prima di tutto una categoria a UISearchBar che aggiunge questo metodo:
- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence {
[(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence];
}
Quindi aggiungere una categoria a UIView che aggiunge questo metodo:
- (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;
}
È ora possibile impostare l'aspetto della tastiera sulla barra di ricerca nella stessa come si farebbe un campo di testo:
[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark];
vi siete persi il fatto che questo proviene da un UISearchBar e non un UITextField. L'UIKeyboard AppearanceAlert ha uno sfondo trasparente, che voglio mantenere uguale in tutta la mia app. Questo può essere ottenuto come hai dimostrato su UITextFields, tuttavia UISearchBar ha anche un campo di testo al suo interno. Volevo sapere se è possibile impostare l'aspetto della tastiera per questo campo di testo. –
Il mio male. Nei documenti, sembra che non ci sia una proprietà o un metodo per impostare la trasparenza della tastiera sulla classe UISearchBar. È possibile impostare solo il tipo di tastiera. – Justin