2014-05-12 22 views
11

Otrzymałem poniższy kod z this SO pytanie. Próbuję przesuwać pola tekstowe, kiedy zaczynam edycję (ponieważ w przeciwnym razie zostaną zakryte klawiaturą iPhone'a). Jednak dziennik ujawnia, że ​​metoda textFieldDidBeginEditing nie jest wywoływana.textFieldDidBeginEditing: nie nazywa się

Mam poniższy kod w dwóch różnych podklasach UIViewController. W jednym z nich, na przykład, mam pole tekstowe połączone z ujęć do UIViewController jak ten

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

przeniosłem pole tekstowe do górnej części widoku (tj nieobjęte klawiaturze), tak że mogłem edytuj go, aby spróbować wyzwolić instrukcję dziennika, ale nie zadziałał. Pole tekstowe działa w oczekiwany sposób, tzn. Dane, które wprowadzam, zapisywane są w coreData itd. Itd.

Czy możesz wyjaśnić, co robię źle?

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

Czy którykolwiek z innych metod delegatów są wywoływane lub kiedy ustawiasz delegata? – Larme

+0

@larme Muszę ustawić delegata, żeby działał? nie wiedział, że – Leahcim

+0

'textFieldDidEndEditing': jest metodą delegata. Jest to metoda 'UITextFieldDelegate', a nie' UITextField'. – Larme

Odpowiedz

34

Nie przypisany swój delegate z UITextField w swojej klasie ViewController:

w pliku viewcontroller.m, W ViewDidLoad metody to zrobić:

self.mnemonicField.delegate=self; 

W swojej viewcontroller.h plik, zrób to:

@interface YourViewController : ViewController<UITextFieldDelegate> 
+0

niesamowite, dziękuję – Leahcim

+0

Naprawiłem mój problem za pomocą tego dziękuję @Khawar Ali. –

3

Powinieneś ustawić delegata pola tekstowego na własny. Dodaj tę linię do sposobu viewDidLoad:

self.mnemonicField.delegate = self; 

i pamiętaj, aby dodać tę linię <UITextFieldDelegate> w celu dostosowania się do tego protokołu.

Ten sam efekt można uzyskać w scenopisie, przeciągając kontrolkę z pożądanego pola UITextField, aby wyświetlić kontroler i wybrać delegata.

4

Stworzyliście IBOutlet więc po prostu przeciągnąć pole tekstowe do viewController i ustawić delegata

enter image description here Następnie w ncurses.h dodać następujące

@interface ViewController : ViewController<UITextFieldDelegate> 
1

W innym przypadku po kliknięciu dowolnego innego przycisku bez przesuwania ostrości Uitextfield, a następnie delegat nie zostanie wywołany, do tego trzeba jawnie wywołać

yourtextfield.resignFirstResponder()