这个问题一直让我发疯。似乎无论我尝试什么,一旦它在我简单的Swift程序中显示,我就无法隐藏键盘。
当我在textFieldShouldReturn中使用resignFirstResponder()时它不起作用,当通过从touchesBegan(...)调用endEditing()来处理背景触摸时它也不起作用。我可以看到当我为它们设置调试器断点时,这些方法都被调用,因此委托被正确设置并按预期调用。
以下是我采取的具体步骤:
我没有想法 - 我错过了什么?
以下是我的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
}
}
答案 0 :(得分:0)
您将从'false'
返回'textFieldShouldEndEditing'
。以下摘自'UITextFieldDelegate'
文档:
返回值
如果编辑停止,则为YES;否则,如果编辑会话,则为NO 应该继续
<强>讨论强>
当要求文本字段重新签名时,将调用此方法 响应者状态。当您的应用程序询问文本时可能会发生这种情况 用于重新对焦的字段或用户尝试更改编辑时 专注于另一个控制。然而,在焦点实际改变之前, 文本字段调用此方法为您的委托提供机会 决定是否应该。
通常,您将从此方法返回YES以允许文本 字段以辞退第一响应者状态。你可能会回来NO, 但是,如果您的代理人检测到无效内容 文本域。通过返回NO,您可以阻止用户切换 到另一个控件,直到文本字段包含有效值。
所以,要么从它返回'true'
要么完全删除方法,除非你真的需要在其中做一些有用的事情。也可能会移除'textFieldDidBeginEditing'
和'touchesBegan'
。我很惊讶相同的代码在Objective-C中有效。