环境:Xcode版本8.2(8C38)/ Swift 3.0
View中的 textFiled 对象通过IBAction连接到控制器中名为 textFieldReturn 的方法。相关代码如下:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func textFieldReturn(_ sender: Any) {
_ = (sender as AnyObject).resignFirstResponder()
}
}
我的期望:
当我点击虚拟键盘的 Return 键时,将调用函数textFieldReturn(_ :)并隐藏键盘
问题观察员:
点击返回键后,该功能未被调用,键盘仍在那里
资源:
此代码spinet来自 Neil Symth (pp-114)
第114页
此代码与原始代码之间的唯一区别是函数参数(Sender)的类型。原版书中的 AnyObject ,默认情况下我有任何,因此我在函数体内强制转换为 AnyObject
问题:
它似乎是一本不错的书,但示例代码对我不起作用。点击返回键时如何调用 resignFirstResponder()方法
替代尝试:
我没有使用 IBAction ,而是转向委托的想法,我将 VeiwController 设置为 textField的代表 < / p>
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)
}
}
问题
替代解决方案仍无效。
感谢您的时间和帮助
答案 0 :(得分:1)
用这个替换你的textFieldReturn方法,它应该可以正常工作。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
确保在viewDidLoad()
中保留以下内容self.tempText.delegate = self
答案 1 :(得分:1)
为什么不使用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
}
}