美文网首页tom首页投稿(暂停使用,暂停投稿)iOS-swift
UITextField有焦点,不弹出键盘,点击后弹出键盘

UITextField有焦点,不弹出键盘,点击后弹出键盘

作者: xiAo__Ju | 来源:发表于2016-10-26 14:08 被阅读1913次

    故事是这样的: 前两天,产品提出了一个需求。一个页面有一个UITextField,有时可以输入,有时不可以输入,输入时有光标,但是不弹出键盘,用户点击输入框后再弹出键盘。因为在这个界面有很多东西,弹出键盘会影响用户的第一视觉效果!

    最终效果

    2016-10-26 13_17_14.gif

    需求听上去似乎很简单!

    • 首先实现第一步:
      进入界面是有光标,不弹出键盘
       textField.inputView = UIView()
       textField.becomeFirstResponder()
    

    “完美!”

    有一点点窃喜。。。

    • 实现第二步,点击输入框后弹出键盘

    方法1: 使用代理
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool

    这个方法在textField成为第一响应时就调用了,也不知道设置了哪个值,有光标后,再点击textField不会响应了。只能pass

    方法2:通知

    网上有人说用通知试试,但是我觉得根本就没用,因为主要是获得点击的响应,也可能是我没有理解别人的思路。

    方法3:添加一个action
    textField.addTarget(self, action: #selector(action), for: .touchUpInside)

    不能响应,具体原因也不知道

    方法4:添加一个button在textField上

    测试一下,响应是没有问题了,把textField.inputView = nil,应该好了吧!点击按钮,键盘没有弹出?感觉原因大概是,在之前已经把textField.inputView = UIView()设置了,导致覆盖了系统的键盘,UI已经构建好了再设置成nil,那个空view实际没有remove掉,网上说系统会监测inputView,实际证明并没有。
    已经折腾将近一上午了!
    于是遗憾的告诉产品经理,这个需求暂时不能实现。(也可以画一个假的光标,但是会产生很多没用的代码,觉得没必要)。
    就在今天早上,我想调用removeFromSuperview这个方法,但是突然出现了reloadInputViews这个方法,咦?感觉昨天那个事情能成啊!迅速打开昨天测试的项目,在textField.inputView = nil下面加上textField.reloadInputViews()

    欧耶, 完美,就是这个效果!

    Demo

    相关文章

      网友评论

        本文标题:UITextField有焦点,不弹出键盘,点击后弹出键盘

        本文链接:https://www.haomeiwen.com/subject/tjpduttx.html