web-dev-qa-db-fra.com

textFieldShouldReturn n'étant pas appelé dans iOS

Nous essayons de trouver un moyen de cacher le clavier, mais nous avons du mal à faire tirer la variable textFieldShouldReturn Pourquoi? 

C'est ce qui a été fait:

* .h

@interface MultiSalesViewController : UIViewController <UITextFieldDelegate>

* .c

txtCardNumber.delegate = self;

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField setUserInteractionEnabled:YES];
    [textField resignFirstResponder];
    return YES;
}

De même, le délégué de la textField est défini sur Propriétaire des fichiers dans Interface Builder. Une chose étrange est que la fonction - (void)textFieldDidEndEditing:(UITextField *)textField de viewController fonctionne. 

Comment faire pour que la dissimulation du clavier fonctionne?

33
iPhone Developer

J'ai eu exactement le même problème et c'est parce que j'ai oublié de définir le délégué du champ de texte dans le générateur d'interface sur 'propriétaire du fichier'.

79
Warren Crowther

J'ai eu le même problème et, comme l'a suggéré Warren Crowther, j'ai réussi à le résoudre en maintenant la touche CTRL enfoncée tout en faisant glisser le curseur de la zone de texte vers l'étiquette "Propriétaire du fichier".

(Mon dieu, Visual Studio me manque parfois ... !!)

enter image description here

(Toutes mes excuses pour avoir répété ce qui a déjà été dit, mais je pensais qu'une capture d'écran pourrait être utile!)

28
Mike Gledhill

J'ai eu le jeu de délégué et tout. Mais j'utilisais une UITextView au lieu de UITextfield ...

Cela aidera peut-être quelqu'un qui essaie de comprendre pourquoi les méthodes de délégation ne sont pas renvoyées.

11
momo

Je vois que vous le mettez dans votre code, mais pour les futurs visiteurs, ajoutez ceci à votre code:

yourTextField.delegate = self;

8
sridvijay

Je pense que vous utilisez xib. Si c'est le cas, vous devez également définir un délégué là-bas. Faites un clic droit sur votre UITextfiled dans xib et vous aurez l'option de délégué le faire glisser vers le propriétaire de votre fichier. 

6
MANiK

voici la réponse de Mike Gledhill et Warren Crowther mise à jour avec la capture d'écran xcode 5.

(pour définir le délégué UITextField, maintenez les touches Ctrl + glisser enfoncées dans UITextField jusqu'au bouton jaune "Propriétaire du fichier", comme indiqué dans l'image ci-dessous. Si le délégué UITextField n'est pas défini, la méthode textFieldShouldReturn n'est jamais appelée).

enter image description here

3
tmr

J'avais tout câblé correctement et - (BOOL)textFieldShouldReturn:(UITextField *)textField n'était toujours pas appelé!

Pour contourner le problème, j'ai configuré une méthode pour déclencher sur 'EditingDidEnd':

 enter image description here

2
kraftydevil

Accédez à l'inspecteur de connexion et connectez le délégué pour visualiser le contrôleur.

1
Biren

assurez-vous que votre MultiSalesViewController implémente le protocole UITextFieldDelegate:

@interface MultiSalesViewController : UIViewController <UITextFieldDelegate>

essayez d'ajouter [self becomeFirstResponder]; après [textField resignFirstResponder];


edit: Juste une autre pensée .. Est-ce que votre UITextField a une valeur définie pour returnKeyType

txtCardNumber.returnKeyType = UIReturnKeyDone;

je ne sais pas si cela doit être défini pour que la fonction fonctionne

1
binnyb

Liste de contrôle pour le faire fonctionner:

  • Avez-vous défini votre contrôleur comme delegate sur Instance UITextField?

  • Assurez-vous que le contrôleur n'est pas désalloué en affectant une propriété (Autorelease) ou en le conservant explicitement.

0
San