当我在iPhone上按“完成”时,键盘不会消失

时间:2009-07-11 08:40:17

标签: iphone objective-c

我正在尝试为iPhone实现一个hello world应用程序,我已经完成了一些工作。但是我无法弄清楚如何让键盘消失。我见过this并且它没有帮助(我的代码中有resignFirstResponder)。我已将相关文本字段作为代理连接到文件所有者。以下是确定键盘是否应该消失的代码:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == textField)
    {
        [textField resignFirstResponder];
    }
    return YES;
}

我确信这应该是显而易见的,但我找不到答案。在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

首先,只是为了澄清:您应该将文本字段的委托连接到文件的所有者,而不是文件所有者对文本字段的委托。这可能听起来令人困惑,但您可以通过在Interface Builder中选择文本字段并检查其“委托”连接点是否为文件所有者来轻松检查。

接下来,如果您在代码中取出if语句会发生什么?将文本字段的委托链接到文件的所有者,然后将代码更改为:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    [theTextField resignFirstResponder];
    return YES;
}

应该产生预期的结果。

如果它仍然不起作用,请检查文件的所有者的类是否与您实现该方法的类相同。例如,如果代码在RootViewController.m中,那么您要指定该文件的owner是Interface Builder中RootViewController的一个实例。

答案 1 :(得分:0)

你的代码

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == textField)
    {
        [textField resignFirstResponder];
    }
    return YES;
}

有点失败。

您没有将resignFirstResponder调用委托方法的参数,而是将其调用为我假设的实例变量。这应该写成如下:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == [self textField]) {
        [theTextField resignFirstResponder];
    }
    return YES;
}