无法关闭键盘,UITextField 委托被调用 OK

Posted

技术标签:

【中文标题】无法关闭键盘,UITextField 委托被调用 OK【英文标题】:Can't dismiss keyboard, UITextField delegate being called OK 【发布时间】:2014-11-23 17:55:35 【问题描述】:

这个问题一直让我发疯。似乎无论我尝试什么,一旦它在我的简单 Swift 程序中显示,我都无法隐藏键盘。

当我在 textFieldShouldReturn 中 resignFirstResponder() 时它不起作用,通过从 touchesBegan(...) 调用 endEditing() 来处理背景触摸时它也不起作用。当我为它们设置调试器断点时,我可以看到这些各自的方法都被调用了,因此委托被正确设置并按预期被调用。

以下是我采取的具体步骤:

创建一个新的单视图应用 Swift 项目 将 UITextField 拖到视图上,连接 IBOutlet,并将 ViewController 设置为 UITextFieldDelegate。 在 iPhone 6 模拟器或 iPhone 6 设备上运行 键盘一旦出现,就永远不会消失!!

我没有想法 - 我错过了什么???

这是我的 ViewController 的全部内容:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate 

@IBOutlet weak var myTextField: UITextField!

  override func viewDidLoad() 
      super.viewDidLoad()
      // Do any additional setup after loading the view, typically from a nib.

      myTextField.delegate = self
  

  override func didReceiveMemoryWarning() 
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  

  override func touchesBegan(touches: NSSet, withEvent event: UIEvent) 
      self.view.endEditing(true)
  

  func textFieldDidBeginEditing(textField: UITextField!) 
      return
  

  func textFieldShouldEndEditing(textField: UITextField!) -> Bool 
      return false
  

  func textFieldShouldReturn(textField: UITextField!) -> Bool 
      textField.resignFirstResponder()
      return true
  

【问题讨论】:

【参考方案1】:

您正在从'textFieldShouldEndEditing' 返回'false'。以下是'UITextFieldDelegate' 文档的摘录:

返回值

是,如果编辑应该停止;否则,如果编辑会话为 NO 应该继续

讨论

当文本字段被要求退出第一个时调用此方法 响应者状态。当您的应用程序询问文本时,可能会发生这种情况 退出焦点或用户尝试更改编辑的字段 专注于另一个控件。然而,在焦点实际改变之前, 文本字段调用此方法让您的委托有机会 决定是否应该。

通常,您会从此方法返回 YES 以允许文本 字段以辞去第一响应者的身份。你可能会返回 NO, 但是,如果您的委托人在 文本域。通过返回 NO,您可以阻止用户切换 到另一个控件,直到文本字段包含有效值。

Source

所以,要么从中返回'true',要么完全删除该方法,除非你真的需要在其中做一些有用的事情。 'textFieldDidBeginEditing''touchesBegan'也应该被删除。我真的很惊讶同样的代码在 Objective-C 中也能工作。

【讨论】:

哦,天哪……我已经从一些示例代码中剪切并粘贴了一组 UITextDelegate 方法,并且完全忽略了其他方法,假设它们是无害的样板。你是 100% 正确的,当我在 Obj-C 中进行“等效”测试时,我只是实现了我感兴趣的回调,而忽略了其他回调,所以它工作得很好。呵呵!

以上是关于无法关闭键盘,UITextField 委托被调用 OK的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法让 UITextField 关闭键盘

UITextfield在UITableViewCells中 - 关闭键盘

UITextField 委托返回多个文本字段

自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用

UIAlertController 实用程序类无法调用 UITextField 委托或目标,但在 UIViewController 中工作

UITextField 键盘不关闭