无法解除键盘,UITextField委托被称为OK

时间:2014-11-23 17:55:35

标签: swift ios8 xcode6

这个问题一直让我发疯。似乎无论我尝试什么,一旦它在我简单的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 个答案:

答案 0 :(得分:0)

您将从'false'返回'textFieldShouldEndEditing'。以下摘自'UITextFieldDelegate'文档:

  

返回值

     

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

     

<强>讨论

     

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

     

通常,您将从此方法返回YES以允许文本   字段以辞退第一响应者状态。你可能会回来NO,   但是,如果您的代理人检测到无效内容   文本域。通过返回NO,您可以阻止用户切换   到另一个控件,直到文本字段包含有效值。

     

Source

所以,要么从它返回'true'要么完全删除方法,除非你真的需要在其中做一些有用的事情。也可能会移除'textFieldDidBeginEditing''touchesBegan'。我很惊讶相同的代码在Objective-C中有效。