通过resignFirstResponder

时间:2017-04-12 13:22:14

标签: ios swift keyboard textfield

环境: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页 iOS 10 App Development Essentials一书的第16章示例

此代码与原始代码之间的唯一区别是函数参数(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)
    }
}

问题

替代解决方案仍无效。

感谢您的时间和帮助

2 个答案:

答案 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
    }
}