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
类中分配你的UITextField
的delegate
:
在您的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()