Ios 通过resignFirstResponder隐藏textField触发的键盘
环境:Xcode版本8.2(8C38)/Swift 3.0 视图中的TextField对象通过iAction连接到控制器中名为textFieldReturn的方法。相关代码如下所示Ios 通过resignFirstResponder隐藏textField触发的键盘,ios,swift,keyboard,textfield,Ios,Swift,Keyboard,Textfield,环境:Xcode版本8.2(8C38)/Swift 3.0 视图中的TextField对象通过iAction连接到控制器中名为textFieldReturn的方法。相关代码如下所示 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func textFieldReturn(_ sender: Any) {
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func textFieldReturn(_ sender: Any) {
_ = (sender as AnyObject).resignFirstResponder()
}
}
我所期望的:
当我点击虚拟键盘的Return键时,将调用函数textFieldReturn(:),并隐藏键盘
问题观察员:
在我点击返回键后,该函数没有被调用,键盘仍然在那里
资源:
此代码源于Neil Symth(pp-114)所著《iOS 10应用程序开发要点》一书第16章的示例
此代码与原始代码之间的唯一区别是函数参数(发送方)的类型。它在原著中是AnyObject,而默认情况下我得到了Any,因此我在函数体内强制转换为AnyObject
问题:
这似乎是一本不错的书,但示例代码对我来说并不适用。当我按下返回键时,如何调用resignFirstResponder()方法
备选方案试用: 我不再使用iAction,而是转向委托的概念,我将VeiwController设置为文本字段的委托
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)
}
}
问题
替代方案仍然不起作用
感谢您的时间和帮助使用此方法替换textFieldReturn方法,它应该可以正常工作
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
确保在viewDidLoad()中保留以下内容
用这个替换textFieldReturn方法,它应该可以正常工作
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
确保在viewDidLoad()中保留以下内容
为什么不使用
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
}
}
为什么不使用
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
}
}
所以有一个原始的委托函数,非常感谢,我不知道这有一个默认函数,非常感谢。但是为什么第一个使用iAction方式的函数不起作用呢?每当按下键盘的返回键时,都会调用函数textfield shouldlreturn。因此,没有其他方法可以工作。因此,这是通过点击返回键隐藏键盘的唯一方法。不,还有很多不同的方法。但如果您按下键盘上的返回键,则只有它才能工作。否则,根据不同的事件有很多方法隐藏键盘。所以有一个原始的委托函数,非常感谢,我不知道有一个默认函数,非常感谢。但是为什么第一个使用iAction方式的函数不起作用呢?每当按下键盘的返回键时,都会调用函数textFieldShouldReturn。因此,没有其他方法可以工作。因此,这是通过点击返回键隐藏键盘的唯一方法。不,还有很多不同的方法。但如果您按下键盘上的返回键,则只有它才能工作。否则,根据不同的事件,有很多方法可以隐藏键盘。