resignFirstResponder 不关闭键盘

Posted

技术标签:

【中文标题】resignFirstResponder 不关闭键盘【英文标题】:resignFirstResponder does not dismiss keyboard 【发布时间】:2011-02-21 13:12:29 【问题描述】:

我有一个 UITextField 和一个 UIButton。如果在文本字段处于活动状态时点击按钮,我想关闭键盘,但我无法这样做。我尝试在点击按钮时调用 [textField resignFirstResponder] 和 [textField endEditing:YES],但它们没有效果—— [textField isFirstResponder] 返回 false,所以 resignFirstResponder 没有效果也就不足为奇了。但在那种情况下,为什么键盘没有消失?谢谢。

【问题讨论】:

另外,如果我在键盘处于活动状态时按下视图,则在弹出视图时会再次显示键盘。 UIKit 是否记得哪个视图是第一响应者,并在其视图控制器显示时将第一响应者状态恢复到该视图? 最后,如果用户在其他地方点击或滑动,是否有一种干净的方法可以让键盘消失?像 disableKeyboardOnFocusLoss 这样的东西是理想的:) 谢谢。 【参考方案1】:

确保您的“textField”类成员正确连接到 nib 文件中。 NSLog 在您调用 firstResponder 之前它的值并查看它是否为零。此外,在文本字段中输入文本,并在调用 resignFirstResponder 的同时使用 NSLog 正确打印出来。通常当控件没有正确响应是因为 IBOutlets 没有正确连接。

【讨论】:

啊,IBOutlet 没有在 IB 中链接。谢谢,很抱歉浪费您的时间。 有没有办法配置 UITextField 以便它在 any 触摸或滑动窗口中的任何其他视图时关闭键盘? 一点也不浪费,人们看到这样的问题/答案越多,“检查奥特莱斯!”的越多越早!思想出现,问题越早解决。 我认为您需要在所有其他视图中添加代码以关闭键盘(如果它已启动)。如果您有多个 UITextField,则将当前活动的 UITextField 缓存在类中的数据成员中,例如“UITextField *currentTF”,然后在任何其他视图获得某些活动时调用 [self.currentTF resignFirstResponder]”。【参考方案2】:

尝试制作 IBAction

-(IBAction)textFieldReturn:(id)sender

[sender resignFirstResponder];

并将其连接到 UIButton

【讨论】:

但用户可能没有按回车键!为什么“自动启用返回键”很重要?如果用户在文本字段处于活动状态时点击按钮,我希望键盘消失——我不关心返回键。谢谢。 已编辑答案,希望对您有所帮助。 是的,连接丢失了。傻我。感谢您的帮助!【参考方案3】:

您是否在 .H 中添加了<UITextFieldDelegate>??

【讨论】:

好吧,我定义了一个在 IB 中连接到 Return 键的 IBAction。由于委托的所有方法都是可选的,并且默认情况下假定 textFieldShouldEndEditing 返回 true,我不明白为什么需要委托。我错过了什么吗? 这是一个糟糕的答案。省略在 .h 文件中的类定义中添加委托将导致编译错误,以防您执行以下操作: self.delegate = self .

以上是关于resignFirstResponder 不关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章

带有搜索返回键的 UITextField 的 resignFirstResponder

resignFirstResponder 无法关闭我在 iPad 上的自定义键盘。为啥?

为啥必须在主队列上异步调用 resignFirstResponder() 来关闭键盘

即使运行代码,resignFirstResponder 也不会关闭键盘

检查现有的 TextField resignFirstResponder?

UITextField - resignFirstResponder 查询