【问题标题】:textFieldDidBeginEditing using tags使用标签的 textFieldDidBeginEditing
【发布时间】:2013-07-23 16:36:31
【问题描述】:

我的 textFieldDidBeginEditing 方法遇到了一个小问题..

我正在尝试确定调用哪个文本字段进行编辑,以便我可以决定是否希望视图向上移动以使该字段可见。

这是我的方法,我已经注释了一些东西,试图找出错误在哪里:

- (void)textFieldDidBeginEditing:(UITextField *)sender
{
NSLog(@"This method is called");
//[self.view setFrame:CGRectMake(0,-120,320,568)];
if(sender.tag == _nameF.tag)
{
    NSLog(@"This if is called");
    //[self.view setFrame:CGRectMake(0,-120,320,568)];
}

else
{
    NSLog(@"Else called instead");
}

}

我在日志中看到“此方法被调用”,所以我知道该方法首先被调用,但在那之后,我看到了:

2013-07-23 12:27:18.654 SidebarDemo[2110:60b]-[NSConcreteNotification 标签]:无法识别的选择器发送到实例 0x15d7b8c0 2013-07-23 12:27:18.655 SidebarDemo[2110:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSConcreteNotification 标签]:无法识别的选择器发送到实例 0x15d7b8c0”

这让我相信这是 sender.tag 的问题,但据我所知,我的代码没有任何问题。

这可能是什么问题?有没有其他方法可以用来找出正在编辑的文本字段?

谢谢。

【问题讨论】:

  • 如何声明_nameF?
  • 错误来自sender.tag 还是_nameF.tag?这个方法是被UITextFieldDelegate 使用还是代表UITextFieldTextDidBeginEditingNotification 通知?
  • 它代表 UITextFieldTextDidBeginEditingNotification 通知使用...
  • 你不能只做一个原始指针比较吗?如果(发件人 == _nameF)
  • 我试过了,但是没有调用 if 语句,由于某种原因它转到“else”。

标签: objective-c uitextfield nslog nsexception


【解决方案1】:

由于您正在设置UITextFieldTextDidBeginEditingNotification 通知来调用您的textFieldDidBeginEditing: 方法,因此您需要更改方法参数。为了避免与相应的UITextFieldDelegate 方法混淆,您还应该重命名此方法(这意味着您需要更新注册通知处理程序的代码行)。

- (void)textFieldDidBeginEditingHandler:(NSNotification *)notification {
    UITextField *textField = (UITextField *)notification.object;

    // It's OK to use == here since we really do want to compare pointer values
    if(textField == _nameF) {
        NSLog(@"This if is called");
        //[self.view setFrame:CGRectMake(0,-120,320,568)];
    } else {
        NSLog(@"Else called instead");
    }
}

不需要标签,因为每个文本字段都有 ivars。

顺便说一句 - 你为什么要为此使用通知?为什么不使用UITextFieldDelegate 方法?

【讨论】:

  • 我刚刚尝试在我的代码中进行上述更改,但我得到了类似的错误,但这次我不相信该方法首先被调用,因为“此方法是调用”不在日志中。有任何想法吗?你能解释一下 uitextfield 委托的方式吗?谢谢
  • 错误是什么?您是否确保注册通知时使用的方法与您使用的新方法名称匹配?在文档中搜索 UITextFieldDelegate。有大量文档和示例应用程序展示了如何使用它。
  • 原来是这个问题,我忘记改了。非常感谢!
猜你喜欢
  • 2012-10-31
  • 2014-06-29
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多