2014-05-12 10 views
11

Ho ricevuto il codice di seguito dalla domanda this SO. Sto provando a far scorrere i campi di testo quando comincio a modificare (perché altrimenti vengono coperti dalla tastiera dell'iPhone). Tuttavia, l'istruzione del registro rivela che il metodo textFieldDidBeginEditing non viene richiamato.textFieldDidBeginEditing: not getting called

Ho il codice qui sotto in due diverse sottoclassi di UIViewController. In uno di essi, per esempio, ho un textfield collegata dallo storyboard alla UIViewController simili

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

ho spostato il campo di testo fino alla parte superiore della vista (cioè non coperta da tastiera) così da poter modificarlo per cercare di attivare l'istruzione del registro ma non ha funzionato. Il campo di testo funziona altrimenti come previsto, cioè i dati che inserisco vengono salvati in coreData ecc. Ecc.

Puoi spiegare cosa potrei fare di sbagliato?

- (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

Viene chiamato uno qualsiasi degli altri metodi delegati o quando è stato eseguito? hai impostato il delegato? – Larme

+0

@larme Devo impostare un delegato affinché funzioni? non sapevo che – Leahcim

+0

'textFieldDidEndEditing': è un metodo delegato. È un metodo 'UITextFieldDelegate', non un' UITextField'. – Larme

risposta

34

Non hai assegnato la tua delegate di UITextField nella ViewController classe:

Nel file viewcontroller.m, In ViewDidLoad metodo, fare questo:

self.mnemonicField.delegate=self; 

Nella tua viewcontroller.h file, fare questo:

@interface YourViewController : ViewController<UITextFieldDelegate> 
+0

fantastico, grazie – Leahcim

+0

ho risolto il problema utilizzando questo grazie @Khawar Ali. –

3

È necessario impostare delegato del campo di testo su self. Aggiungere questa riga al metodo di viewDidLoad:

self.mnemonicField.delegate = self; 

e ricordarsi di aggiungere questa linea <UITextFieldDelegate> per conformarsi a tale protocollo.

È possibile ottenere lo stesso effetto nello storyboard trascinando il controllo da UITextField desiderato per visualizzare il controller e selezionare delegato.

4

si è creato IBOutlet quindi basta trascinare il campo di testo per viewController e impostare delegato

enter image description here Poi nel .h aggiungere il seguente

@interface ViewController : ViewController<UITextFieldDelegate> 
1

In altri casi, se si fa clic su qualsiasi altro tasto senza spostare il focus della Uitextfield quindi non verrà chiamato delegato, per cui è necessario chiamare esplicitamente

yourtextfield.resignFirstResponder() 
Problemi correlati