隐藏由 textField 通过 resignFirstResponder 触发的键盘



环境:Xcode 版本 8.2 (8C38)/Swift 3.0

视图中的textFile对象通过 IBAction 连接到控制器中名为textFieldReturn的方法。相关代码显示如下

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func textFieldReturn(_ sender: Any) {
_ = (sender as AnyObject).resignFirstResponder()
}
}

我的期望

当我按下虚拟键盘的回车键时,函数textFieldReturn(_:)将被调用,键盘将被隐藏

问题观察者

点击回车键后没有调用该功能,键盘仍然存在

资源

此代码尖锐来自Neil Symth(pp-114)的iOS 10 App Development Essentials一书的第16章示例。

此代码与原始代码之间的唯一区别是函数参数的类型 (Sender)。它在原书中是AnyObject,而我默认有Any,因此我在函数体内投射到AnyObject

问题

它似乎是一本不错的书,但示例代码对我不起作用。当我点击返回键时,如何调用resignFirstResponder()方法


替代试用

我没有使用IBAction,而是转向委托的想法,我将VeiwController设置为textField的委托

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var tempText: UITextField! //reference the TextField as the variable **tempText** in the controller  
override func viewDidLoad() {
super.viewDidLoad()
self.tempText.delegate = self //set up the delegation 
}
func textFieldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return(true)
}
}

问题

替代解决方案仍然不起作用。

感谢您的时间和帮助

为什么不使用UITextField的原始委托功能?

我认为默认函数将按您的要求工作:

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var tempText: UITextField! //reference the TextField as the variable **tempText** in the controller  
override func viewDidLoad() {
super.viewDidLoad()
self.tempText.delegate = self //set up the delegation 
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool{
textField.resignFirstResponder()
return false
}
}

用这个替换你的textFieldReturn方法,它应该可以正常工作。

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}

确保在您的视图中保留以下内容DidLoad()

self.tempText.delegate = self