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.
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 .
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.
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.
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.
Vous pouvez remplacer l'attribut UITextField
de hasText
pour atteindre cet objectif:
class CustomTextField : UITextField {
override public var hasText: Bool {
get {
return evaluateString(text)
}
}
}
Où 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.
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
Essayez d'utiliser un UITextField! pour recevoir cette chaîne et que le retour sont partis!
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.