Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c textFieldDidBeginEditing使用标记_Objective C_Uitextfield_Nslog_Nsexception - Fatal编程技术网

Objective c textFieldDidBeginEditing使用标记

Objective c textFieldDidBeginEditing使用标记,objective-c,uitextfield,nslog,nsexception,Objective C,Uitextfield,Nslog,Nsexception,我的textFieldDidBeginEditing方法遇到了一个小问题 我试图找出哪个textfield被调用进行编辑,这样我就可以决定是希望视图向上移动还是不使该字段可见 这是我的方法,我已经注释了一些内容,试图找出错误所在: - (void)textFieldDidBeginEditing:(UITextField *)sender { NSLog(@"This method is called"); //[self.view setFrame:CGRectMake(0,-120,320,

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

我试图找出哪个textfield被调用进行编辑,这样我就可以决定是希望视图向上移动还是不使该字段可见

这是我的方法,我已经注释了一些内容,试图找出错误所在:

- (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]-[nsconcretenoification tag]:发送到实例0x15d7b8c0的无法识别的选择器 2013-07-23 12:27:18.655 SidebarDemo[2110:60b]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSConcreteNotification tag]:未识别的选择器发送到实例0x15d7b8c0'

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

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


谢谢。

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

不需要标记,因为每个文本字段都有IVAR


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

如何声明\u nameF?错误是来自
sender.tag
还是
\u nameF.tag
?此方法是由
UITextFieldDelegate
使用还是代表
UITextFieldTextDidBeginEditingNotification
通知使用?它是代表UITextFieldTextDidBeginEditingNotification通知使用的……您不能只进行原始指针比较吗?if(sender==\u nameF)我已经尝试过了,但是if语句没有被调用,出于某种原因,它会转到“else”。我只是尝试在代码中进行上述更改,但我得到了一个类似的错误,但这次我不相信该方法一开始就被调用了,因为“this method is called”不在日志中。有什么想法吗?您能解释一下uitextfield代理执行此操作的方式吗?谢谢,错在哪里?您是否确保注册通知时使用的方法与您使用的新方法名称匹配?在文档中搜索
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");
    }
}