Dans le contrôle UISearchBar, constitue-t-il un moyen de modifier le titre de la clé de recherche du clavier sur Terminé?
Réponses
Trop de publicités?Pour une barre de recherche nommée tablesearchbar:
// Set the return key and keyboard appearance of the search bar
for (UIView *searchBarSubview in [tableSearchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
[(UITextField *)searchBarSubview setReturnKeyType:UIReturnKeyDone];
[(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
}
@catch (NSException * e) {
// ignore exception
}
}
}
Depuis iOS 7 beta 5, la réponse de Run Loop ne fonctionnait pas pour moi, mais cela fonctionnait:
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
}
Comme il s'agit d'un protocole avec des méthodes facultatives, vous devez tester chaque méthode séparément au lieu d'essayer de capturer.
for (UIView *searchBarSubview in searchBar.subviews)
{
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)])
{
// keyboard appearance
if ([searchBarSubview respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
// return key
if ([searchBarSubview respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarSubview setReturnKeyType:UIReturnKeyDone];
// return key disabled when empty text
if ([searchBarSubview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarSubview setEnablesReturnKeyAutomatically:NO];
// breaking the loop when we are done
break;
}
}
Cela fonctionnera pour iOS <= 6. Pour iOS> = 7, vous devez effectuer une boucle dans searchBar.subviews[0].subviews
.
Comme les claviers de style Alert sont semi-transparents, je peux voir ma vue derrière. Cela ne semble pas très beau car j'ai plusieurs éléments derrière le clavier, ce qui empêche les touches de se démarquer. Je voulais un clavier tout noir.
J'ai donc animé un UIImageView noir en position derrière le clavier lorsque le texte est édité. Cela donne l’apparence d’un clavier entièrement noir.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
blackBoxForKeyboard.frame = CGRectMake(0, 377, 320, 216);
[UIView commitAnimations];
}