59 votes

Modifier le titre du bouton de recherche UISearchBar / Keyboard

Dans le contrôle UISearchBar, constitue-t-il un moyen de modifier le titre de la clé de recherche du clavier sur Terminé?

99voto

Run Loop Points 5173

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
                }
            }
        }
 

43voto

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];
            }
        }      
    }
}
 

18voto

skippy Points 568

Un autre indice utile, à la section Code Run Loop (dans "@try").

Ce bouton "Terminé" est activé lorsque le champ de texte est vide:

 UITextField *tf = (UITextField *)searchBarSubview;
tf.enablesReturnKeyAutomatically = NO;
 

1voto

Cœur Points 1538

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 .

0voto

RyeMAC3 Points 794

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

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X