web-dev-qa-db-fra.com

Comment désactiver/activer la clé de retour dans un UITextField?

Existe-t-il un moyen d'activer ou de désactiver la clé de retour par programme dans la variable UIKeyboard? Le plus proche que je puisse trouver est enablesReturnKeyAutomatically , mais cela ne fera que dire si le désactiver.

63
Sophie Alpert

Si vous pouvez obtenir l'objet UIKeyboard lui-même (quelque chose qui n'est pas exposé dans le SDK, remarquez qu'Apple risque de ne pas être heureux si vous utilisez ces appels), il existe alors une fonction setReturnKeyEnabled: member pratique.

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

(via dump d'Erica Sadun des frameworks iPhone 2.2)

La mise en oeuvre de magicallyGetAUIKeyboardInstance est décrite ici .

23
Elliot Kroo

Peut-être que suivre le segment de code aide.

textfield.enablesReturnKeyAutomatically = YES;

Ceci est disponible publiquement dans le SDK iPhone dans UITextInputTraits. Avec cette touche, la touche Retour sera désactivée si aucun texte saisi n'est disponible dans le champ de texte.

70

La propriété UITextField de enablesReturnKeyAutomatically peut être définie directement dans Interface Builder, il suffit de sélectionner le champ de texte et d'ouvrir l'inspecteur Attributs. Comme Tharindu l’a déclaré, cela activera et désactivera automatiquement la touche de retour selon que du texte a été saisi ou non.

enter image description here

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

EDIT pour adresser les votes négatifs:

Sinon, il n'existe aucun moyen officiel d'activer et de désactiver la touche de retour sur commande. Je déconseille d'essayer d'utiliser des API privées pour accomplir cela. Vous pouvez également utiliser la méthode textFieldShouldReturn: delegate et y placer votre condition/validation et y répondre en conséquence.

25
Kyle Clegg

Vous pouvez remplacer l'attribut UITextField de hasText pour atteindre cet objectif:

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

evaluateString(_ text: String?) -> Bool vérifie vos critères de saisie nécessaires, par exemple le nombre de caractères.

Bien entendu, cela ne fonctionne que si enablesReturnKeyAutomatically = true est défini sur la variable UITextField.

Je suis conscient que ma réponse n’est ni opportune ni écrite en Objective-C, mais comme je n’ai pas pu trouver de réponse nulle part ailleurs et que cette question est régulièrement évoquée dans d’autres sujets, je pense que c’est le meilleur endroit pour le poster. 

16
Janne

Une bonne idée est de créer un fichier pour accéder à cette classe où que vous soyez. 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

Maintenant, vous pouvez importer et accéder à cette classe à partir de votre propre classe:

#import "UIKeyboard.h"

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

Une documentation complète de cette classe, que vous pouvez trouver ici:http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

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

3

Essayez d'utiliser un UITextField! pour recevoir cette chaîne et que le retour sont partis!

0
Jean Luiz

Voici une technique disponible à partir de l'API documentée, mais elle ne fournit aucun retour visuel lorsque la touche Entrée est désactivée.

- (void)setup {
    // Or in init
    self.textField.delegate = self;
}

// <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // substitute your test here
    return [textField.text rangeOfString:@"@"].location != NSNotFound;
}

D'autres réponses ici peuvent être utilisées avec 

[textField addTarget:self
              action:@selector(validateTextField:)
    forControlEvents:UIControlEventEditingChanged];

fournir un retour visuel dynamique au fur et à mesure que l'utilisateur tape.

0
Rik Renich