不能解雇键盘,UITextField委托被称为OK
问题描述:
这个问题一直让我发疯。看起来无论我尝试什么,只要在简单的Swift程序中显示,我都无法隐藏键盘。不能解雇键盘,UITextField委托被称为OK
当我在textFieldShouldReturn中resignFirstResponder()时不起作用,在通过从touchesBegan(...)调用endEditing()来处理背景触摸时它不起作用。我可以看到,当我为它们设置调试器断点时,这些相应的方法全部被调用,所以委托被正确设置并按预期调用。
下面是我的具体步骤:
- 创建一个新的单一视图应用斯威夫特项目
- 将一个的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
}
}
答
您正在返回'false'
从'textFieldShouldEndEditing'
。下面是从'UITextFieldDelegate'
文件的摘录:
返回值
YES如果编辑应停止;否则,没有如果编辑会话 应继续
讨论
当文本字段被要求辞职第一 响应状态时调用此方法。当您的应用程序询问文字 字段的焦点或当用户尝试将编辑焦点更改为另一个控件时,可能会发生这种情况。但是,在焦点实际发生变化之前,文本字段会调用此方法,以便让您的代表有机会决定是否应该使用 。
通常情况下,您将从此方法返回YES以允许文字 字段退出第一个响应者状态。但是,如果代理人在 文本字段中检测到无效内容,您可能会返回NO, 。通过返回NO,可以防止用户将 切换到另一个控件,直到文本字段包含有效值。
所以,要么返回从中'true'
或彻底去除方法,除非你真的需要做的东西在里面有用。也应该删除'textFieldDidBeginEditing'
和'touchesBegan'
。我真的很惊讶,相同的代码在Objective-C中工作。
哦,对于......我从一些示例代码中剪切并粘贴了一组UITextDelegate方法,并且完全忽略了其他方法,假设它们是无害的样板文件。而且你100%正确,当我在Obj-C中进行'等价'测试时,我刚刚实现了我感兴趣的回调函数,并且忽略了其他函数,所以它工作正常。咄! – TRB 2014-11-24 17:58:57