textFieldDidBeginEditing:没有被调用

时间:2014-05-12 14:01:09

标签: ios objective-c

我从this问题得到了以下代码。我在开始编辑时尝试滑动文本字段(因为它们会被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];
}

4 个答案:

答案 0 :(得分:40)

您尚未在delegate课程中分配UITextField ViewController个:

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

self.mnemonicField.delegate=self; 

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

@interface YourViewController : ViewController<UITextFieldDelegate>

答案 1 :(得分:4)

您创建了IBOutlet,只需将文本字段拖到viewController并设置委托

即可

enter image description here然后在.h中添加以下内容

@interface ViewController : ViewController<UITextFieldDelegate>

答案 2 :(得分:3)

您应该将文本字段委托设置为self。 将此行添加到viewDidLoad方法:

self.mnemonicField.delegate = self;

并记住添加此行<UITextFieldDelegate>以符合该协议。

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

答案 3 :(得分:1)

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

collection_select