75 votes

Comment désactiver/activer la touche retour dans un champ UITextField ?

Existe-t-il un moyen d'activer ou de désactiver de manière programmatique la touche Retour sur l'écran du UIKeyboard ? Le plus proche que j'ai pu trouver est enablesReturnKeyAutomatically mais cela permettra seulement de savoir s'il faut le désactiver ou non.

0 votes

Voir ma réponse à la question en double ici

86voto

Le segment de code suivant pourrait peut-être vous aider :

textfield.enablesReturnKeyAutomatically = YES;

Ceci est disponible publiquement dans le SDK de l'iPhone dans UITextInputTraits. Grâce à elle, la touche de retour sera désactivée lorsqu'aucun texte n'est disponible dans le champ de texte.

2 votes

En Swift : textfield.enablesReturnKeyAutomatically = true

3 votes

Cela peut paraître idiot, mais je voulais cette réponse lorsque je suis arrivé ici. Comme beaucoup de gens, je pense, j'ai cliqué aveuglément sur le premier lien qui est apparu dans Google, j'ai sauté la question et j'ai lu les deux premières réponses.

31voto

Janne Points 281

Vous pouvez remplacer UITextField 's hasText pour y parvenir :

class CustomTextField : UITextField {
    override public var hasText: Bool {
        get {
            return evaluateString(text)
        }
    }
}

evaluateString(_ text: String?) -> Bool vérifie les critères d'entrée nécessaires, par exemple le nombre de caractères.

Bien entendu, cela ne fonctionne qu'en combinaison avec enablesReturnKeyAutomatically = true sur le UITextField .

Je suis conscient que ma réponse n'est ni opportune ni écrite en Objective-C, mais étant donné que je n'ai pas pu trouver de réponse ailleurs et que cette question est régulièrement mentionnée dans d'autres fils de discussion, je pense que c'est ici le meilleur endroit pour la poster.

27voto

Kyle Clegg Points 8441

UITextField 's enablesReturnKeyAutomatically peut être définie directement dans l'Interface Builder, il suffit de sélectionner le champ de texte et d'ouvrir l'inspecteur d'attributs. Comme l'a indiqué Tharindu, cette propriété activera et désactivera automatiquement la touche de retour selon qu'un texte a été saisi ou non.

enter image description here

Bien entendu, si vous devez modifier cette valeur dans le code, vous pouvez toujours la définir par programme en utilisant la fonction nameTextField.enablesReturnKeyAutomatically = true .

EDIT pour répondre aux downvotes :

Sinon, il n'existe aucun moyen officiel d'activer ou de désactiver la touche retour sur commande. Je vous déconseille d'essayer d'utiliser des API privées pour y parvenir. En revanche, vous pouvez utiliser l'API textFieldShouldReturn: et y placer votre conditionnel/validation et répondre en conséquence.

23voto

Elliot Kroo Points 2199

Si vous pouvez obtenir l'objet UIKeyboard lui-même (ce qui n'est pas exposé dans le SDK, n'oubliez pas qu'Apple pourrait ne pas être satisfait si vous utilisez ces appels), vous disposez alors d'une fonction membre setReturnKeyEnabled : très pratique.

id keyboard = [self magicallyGetAUIKeyboardInstance];
[keyboard setReturnKeyEnabled: NO];

(via La décharge d'Erica Sadun des cadres 2.2 iPhone)

La mise en œuvre de la magicallyGetAUIKeyboardInstance est décrite ici .

1voto

Une bonne idée est de créer un fichier permettant d'accéder à cette classe de n'importe où. Voici le code :

UIKeyboard.h

#import <UIKit/UIKit.h> 

@interface UIApplication (KeyboardView)

    - (UIView *)keyboardView; 

@end

UIKeyboard.m

#import "UIKeyboard.h"

@implementation UIApplication (KeyboardView)

- (UIView *)keyboardView
{
    NSArray *windows = [self windows];
    for (UIWindow *window in [windows reverseObjectEnumerator])
    {
        for (UIView *view in [window subviews])
        {
            if (!strcmp(object_getClassName(view), "UIKeyboard"))
            {
                return view;
            }
        }
    }

    return nil;
}

@end

Vous pouvez maintenant importer cette classe et y accéder à partir de votre propre classe :

#import "UIKeyboard.h"

    // Keyboard Instance Pointer.
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView];

Une documentation complète de cette classe est disponible ici : http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

Pour plus d'informations, cliquez ici : http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

12 votes

Probabilité de rejet de l'App Store : 100

0 votes

Je ne pense pas que cela mérite un rejet. Nous ne faisons qu'itérer sur les sous-vues et choisir celle qui nous plaît. Son côté pratique ne répond cependant pas à la question qui concerne la désactivation de la touche retour.

1 votes

C'est une très mauvaise idée... outre le fait qu'Apple vous rejette, la configuration du système pourrait changer sans que vous le sachiez et mettre fin à cette solution.

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