2014-05-12 5 views
11

J'ai obtenu le code ci-dessous de this SO question. J'essaie de faire glisser des champs de texte lorsque je commence à éditer (parce qu'ils sont couverts par le clavier de l'iPhone). Cependant, l'instruction log révèle que la méthode textFieldDidBeginEditing n'est pas appelée.textFieldDidBeginEditing: ne pas se faire appeler

J'ai le code ci-dessous dans deux sous-classes différentes de UIViewController. Dans l'un d'eux, par exemple, j'ai un textfield connecté du story-board à l'UIViewController comme celui-ci

@property (strong, nonatomic) IBOutlet UITextField *mnemonicField; 

je me suis déplacé le champ de texte au sommet de la vue (non couverte par le clavier) pour que je puisse l'éditer pour essayer de déclencher l'instruction de log mais cela n'a pas fonctionné. Le champ de texte fonctionne normalement comme prévu, c'est-à-dire que les données que je saisis sont sauvegardées dans les données de base, etc.

Pouvez-vous expliquer ce que je fais de mal?

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    NSLog(@"The did begin edit method was called"); 
    [self animateTextField: textField up: YES]; 
} 


- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [self animateTextField: textField up: NO]; 
} 

- (void) animateTextField: (UITextField*) textField up: (BOOL) up 
{ 
    const int movementDistance = 180; // tweak as needed 
    const float movementDuration = 0.3f; // tweak as needed 

    int movement = (up ? -movementDistance : movementDistance); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.view.frame = CGRectOffset(self.view.frame, 0, movement); 
    [UIView commitAnimations]; 
} 
+0

Est-ce que l'une des autres méthodes de délégation est appelée ou quand est-ce que vous définissez le délégué? – Larme

+0

@larme Je dois définir un délégué pour que cela fonctionne? ne savait pas que – Leahcim

+0

'textFieldDidEndEditing': est une méthode déléguée. C'est une méthode 'UITextFieldDelegate', pas une' UITextField'. – Larme

Répondre

34

Vous n'avez pas attribué delegate de UITextField dans votre classe ViewController:

Dans votre fichier viewcontroller.m, Dans la méthode ViewDidLoad, faites ceci:

self.mnemonicField.delegate=self; 

Dans votre viewcontroller.h fichier, faites ceci:

@interface YourViewController : ViewController<UITextFieldDelegate> 
+0

génial, merci – Leahcim

+0

j'ai résolu mon problème en utilisant ce merci @ Khawar Ali. –

3

Vous devez définir le délégué de champ de texte sur self. Ajouter cette ligne à la méthode viewDidLoad:

self.mnemonicField.delegate = self; 

et souvenez-vous d'ajouter cette ligne <UITextFieldDelegate> pour se conformer à ce protocole.

Vous pouvez obtenir le même effet dans le storyboard en glissant un contrôle à partir de UITextField souhaité pour afficher le contrôleur et sélectionner un délégué.

4

Vous avez créé IBOutlet donc il suffit de glisser votre textfield à viewController et délégué mis

enter image description here Puis, en .h ajouter ce qui suit

@interface ViewController : ViewController<UITextFieldDelegate> 
1

Dans d'autres cas, si vous cliquez sur un autre bouton sans déplacer le centre de Uitextfield puis delegate ne sera pas appelé, pour cela vous devez appeler explicitement

yourtextfield.resignFirstResponder() 
Questions connexes