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 и установите делегат
Затем в .h добавьте следующее
@interface ViewController : ViewController<UITextFieldDelegate>
Ответ 3
Вы должны настроить делегат текстового поля на себя.
Добавьте эту строку в метод viewDidLoad:
self.mnemonicField.delegate = self;
и не забудьте добавить эту строку <UITextFieldDelegate>
в соответствие с этим протоколом.
Вы можете добиться такого же эффекта в раскадровке, перетащив управление из желаемого UITextField, чтобы просмотреть контроллер и выбрать делегат.
Ответ 4
В другом случае, если вы нажмете любую другую кнопку, не перемещая фокус Uitextfield, делегат не будет вызван, для этого вам нужно явно вызвать
yourtextfield.resignFirstResponder()