我的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 tag]:无法识别的选择器发送到实例0x15d7b8c0 2013-07-23 12:27:18.655 SidebarDemo [2110:60b] * 由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSConcreteNotification标记]:无法识别的选择器发送到实例0x15d7b8c0'
这让我相信它与sender.tag有关,但据我所知,我的代码没有任何问题。
这里的问题是什么?有没有其他方法可以用来找出正在编辑的文本字段?
感谢。
答案 0 :(得分:2)
由于您要设置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,因此不需要标记。
BTW - 你为什么要使用这个通知?为什么不使用UITextFieldDelegate
方法?