项目里有个比较古怪的需求:在A页面点击导航条上的UITextField,需要push到新的B页面。

之前就是简单地在代理方法中类似这样写:

[Swift] 纯文本查看 复制代码
func textFieldDidBeginEditing(_ textField: UITextField) {
        let vc = UIViewController()
        vc.view.backgroundColor = UIColor.white
        navigationController?.pushViewController(vc, animated: true)
    }


这段代码正常工作了有好几个版本。

今天测试妹子来找我,她点击那个文本框后,没有跳转,弹出了键盘,而且奇怪的是A页面的返回键也失灵了!

经过广泛测试,这个问题只存在于部分机型(iPhone5s)。

一开始怀疑是自定义的导航控制器有问题,但是换成UINavigationViewController以后问题依旧。

后来写了个Demo,又发现新的问题:可以push到B页面,但是从B返回A后立马又Push到了B,貌似明白了什么。所以就这样写了:

[Swift] 纯文本查看 复制代码
func textFieldDidBeginEditing(_ textField: UITextField) {
        textField.resignFirstResponder()
        let vc = UIViewController()
        vc.view.backgroundColor = UIColor.white
        navigationController?.pushViewController(vc, animated: true)
    }


不知道你发现什么没有~

总之这下完全正常了。至于为什么A页面的返回键失灵,值得好好考虑了。有明了的同学还望多多指点。

最后想想,其实还可以在TextField上面加个透明的button这样的方法来规避这个问题。需求奇葩,就要用非常手段对付~

故事发生在OC的项目里,但用Swift也做了实验。感兴趣的同学可以下载Demo看看。

UITextField点击后的故事

UITextField点击后的故事 - 敏捷大拇指 - UITextField点击后的故事


TapTextFieldToPushNewViewControllerTest.zip (27.63 KB, 下载次数: 0)