环境: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