iOS - UIInputView和UIInputAccessoryView

簡介

// Presented when object becomes first responder.  If set to nil, reverts to following responder chain.  If
// set while first responder, will not take effect until reloadInputViews is called.
    open var inputView: UIView?

    open var inputAccessoryView: UIView?
WX20180120-230100@2x.png

顧名思義,UIInputView就是鍵盤按鍵那個View,UIInputAccessoryView就是吸附在鍵盤視圖上面的toolBar。藍色的是UIInputView,紅色的是UIInputAccessoryView。

Frame

@IBOutlet weak var textView: UITextView!
    
    lazy var ssInputAccessoryView: UIView = {
        let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 40))
        view.backgroundColor = UIColor.red
        return view
    }()
    lazy var ssInputView: UIView = {
        let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 400))
        view.backgroundColor = UIColor.blue
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.textView.inputAccessoryView = self.ssInputAccessoryView
        self.textView.inputView = self.ssInputView
    }

這里面會有的幾個問題。
設置self.textView.inputAccessoryView的時候,View的Frame會帶過來,即原來的View的frame是多少,inputAccessoryView和inputView的frame就是多少,當然也可以設置完inputView和inputAccessoryView之后再設置frame。其實這邊就帶了frame的高度。

self.textView.inputView?.frame = CGRect(x: 0, y: 0, width: 50, height: 50)

但是這邊會有問題,在add viewController的View的時候,frame無法帶過來,默認是200左右的高度。即使設置了view之后,也無法調(diào)整。目前我還在探索中,歡迎更好的建議。//TODO

self.textView.inputView = nil

inputView返回為keyboard

Animation

inputView和inputAccessoryView的動態(tài)切換,需要先設置View,之后reload.

self.textView.resignFirstResponder()
self.textView.becomeFirstResponder()
self.textView.reloadInputViews()

后者效率更好。不過這邊的問題是inputView在切換到keyboard和custom inputView的時候并沒有動畫效果。目前我孩砸探索中,歡迎更好的建議。//TODO

Debug View Hierarchy

視圖檢查其無法抓取inputView和inputAccessoryView的視圖。

Show Toast

由于inputView和inputAccessoryView是iOS系統(tǒng)獨立于app視圖的,所以一方面視圖檢查器抓取不到,另一方面是toast始終會被inputView圖層覆蓋。

First Responder

由于iOS系統(tǒng)內(nèi),text的控件和inputView是緊耦的,當text control是firstResponder的時候,text control彈出cursor,觸發(fā)begin editing事件,iOS系統(tǒng)彈出鍵盤,以上幾個對象和事件是關(guān)聯(lián)的,并沒有單獨控制的辦法。(比如我想讓鍵盤消失,但是cursor不消失,是做不到的)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容