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

问题描述:

我正在尝试为iPhone实现一个Hello World应用程序,并且我已经完成了一些操作。但我无法弄清楚如何让键盘消失。我见过this,没有帮助(我的代码中有resignFirstResponder)。我已将相关文本字段作为代表连接到文件的所有者。这是确定键盘是否应该消失的代码:当我在iPhone上按“完成”时键盘不会消失

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

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

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

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

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

应产生期望的结果。

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

+0

我想我不清楚委托是的,我有它按照你指定的有线。出于某种原因,删除if语句很好地解决了问题。谢谢! – RCIX 2009-07-11 08:50:04

代码

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

是有点失败。

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

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

当然,要使用我提供的代码,textField必须是属性。实际上,你不应该与实例变量进行沟通。这是属性的用途。属性提供了一个很好的,快乐的,由内存管理的封装,可以让你使用实例变量来做事情。 – 2009-07-20 08:35:47