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

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

【问题讨论】:

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

标签: iphone cocoa-touch ios uikit


【解决方案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 .
猜你喜欢
  • 2011-03-21
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多