TextFieldDidBeginEditing: не получить вызов

Я получил код ниже из этого вопроса SO. Я пытаюсь свернуть текстовые поля, когда я начинаю редактирование (потому что в противном случае они покрываются клавиатурой iPhone). Тем не менее, оператор журнала показывает, что метод textFieldDidBeginEditing не вызван.

У меня есть код ниже в двух разных подклассах UIViewController. В одном из них, например, у меня есть текстовое поле, связанное с раскадровкой с UIViewController, вроде этого

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

Я переместил текстовое поле вверху представления (т.е. не было закрыто клавиатурой), чтобы изменить его, чтобы попытаться вызвать оператор журнала, но он не сработал. Текстовое поле в противном случае работает, как ожидается, то есть данные, которые я вводил, получают сохранение в coreData и т.д. И т.д.

Можете ли вы объяснить, что я могу делать неправильно?

- (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];
}

Ответ 1

Вы не назначили delegate UITextField в своем классе ViewController:

В файле viewcontroller.m, In ViewDidLoad сделайте следующее:

self.mnemonicField.delegate=self; 

В файле viewcontroller.h сделайте следующее:

@interface YourViewController : ViewController<UITextFieldDelegate>

Ответ 2

Вы создали IBOutlet, поэтому просто перетащите текстовое поле в viewController и установите делегат

enter image description here Затем в .h добавьте следующее

@interface ViewController : ViewController<UITextFieldDelegate>

Ответ 3

Вы должны настроить делегат текстового поля на себя. Добавьте эту строку в метод viewDidLoad:

self.mnemonicField.delegate = self;

и не забудьте добавить эту строку <UITextFieldDelegate> в соответствие с этим протоколом.

Вы можете добиться такого же эффекта в раскадровке, перетащив управление из желаемого UITextField, чтобы просмотреть контроллер и выбрать делегат.

Ответ 4

В другом случае, если вы нажмете любую другую кнопку, не перемещая фокус Uitextfield, делегат не будет вызван, для этого вам нужно явно вызвать

yourtextfield.resignFirstResponder()