Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过resignFirstResponder隐藏textField触发的键盘_Ios_Swift_Keyboard_Textfield - Fatal编程技术网

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

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) {

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

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

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。因此,没有其他方法可以工作。因此,这是通过点击返回键隐藏键盘的唯一方法。不,还有很多不同的方法。但如果您按下键盘上的返回键,则只有它才能工作。否则,根据不同的事件,有很多方法可以隐藏键盘。