textFieldDidBeginEditing:没有被调用

我从下面的问题得到了下面的代码。 我开始编辑时试图滑动文本框(因为它们被iPhone键盘覆盖)。 但是,日志语句显示textFieldDidBeginEditing方法没有被调用。

我在UIViewController的两个不同的子类下面的代码。 在其中之一,例如,我有一个从故事板连接到UIViewController这样的文本字段

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

我将文本字段移动到视图的顶部(即没有被键盘覆盖),以便我可以编辑它来尝试触发日志语句,但是它不起作用。 文本字段,否则按预期工作,即我input的数据被保存到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]; } 

你还没有在你的ViewController类中分配你的UITextFielddelegate

在您的viewcontroller.m文件中,在ViewDidLoad方法中,执行以下操作:

 self.mnemonicField.delegate=self; 

在你的viewcontroller.h文件中,执行以下操作:

 @interface YourViewController : ViewController<UITextFieldDelegate> 

您创build了IBOutlet,只需将您的文本框拖到viewController并设置委托

在这里输入图像说明 然后在.h中添加以下内容

 @interface ViewController : ViewController<UITextFieldDelegate> 

你应该build立自己的文本字段委托。 将此行添加到viewDidLoad方法:

 self.mnemonicField.delegate = self; 

并记得添加这行<UITextFieldDelegate>以符合该协议。

通过控制从所需的UITextField拖动到视图控制器并select委托,您可以在故事板中实现相同的效果。

在其他情况下,如果您单击任何其他button而不移动Uitextfield的焦点,则不会调用委托,因为您需要显式调用

 yourtextfield.resignFirstResponder()