故事是這樣的: 前兩天,產(chǎn)品提出了一個(gè)需求堤框。一個(gè)頁(yè)面有一個(gè)UITextField域滥,有時(shí)可以輸入纵柿,有時(shí)不可以輸入,輸入時(shí)有光標(biāo)启绰,但是不彈出鍵盤(pán)昂儒,用戶點(diǎn)擊輸入框后再?gòu)棾鲦I盤(pán)。因?yàn)樵谶@個(gè)界面有很多東西委可,彈出鍵盤(pán)會(huì)影響用戶的第一視覺(jué)效果渊跋!
最終效果
需求聽(tīng)上去似乎很簡(jiǎn)單!
- 首先實(shí)現(xiàn)第一步:
進(jìn)入界面是有光標(biāo)着倾,不彈出鍵盤(pán)
textField.inputView = UIView()
textField.becomeFirstResponder()
“完美拾酝!”
有一點(diǎn)點(diǎn)竊喜。卡者。蒿囤。
- 實(shí)現(xiàn)第二步,點(diǎn)擊輸入框后彈出鍵盤(pán)
方法1: 使用代理
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
這個(gè)方法在textField
成為第一響應(yīng)時(shí)就調(diào)用了崇决,也不知道設(shè)置了哪個(gè)值材诽,有光標(biāo)后,再點(diǎn)擊textField
不會(huì)響應(yīng)了恒傻。只能pass
方法2:通知
網(wǎng)上有人說(shuō)用通知試試脸侥,但是我覺(jué)得根本就沒(méi)用,因?yàn)橹饕谦@得點(diǎn)擊的響應(yīng)盈厘,也可能是我沒(méi)有理解別人的思路睁枕。
方法3:添加一個(gè)action
textField.addTarget(self, action: #selector(action), for: .touchUpInside)
不能響應(yīng),具體原因也不知道
方法4:添加一個(gè)button在textField上
測(cè)試一下沸手,響應(yīng)是沒(méi)有問(wèn)題了外遇,把textField.inputView = nil
,應(yīng)該好了吧!點(diǎn)擊按鈕罐氨,鍵盤(pán)沒(méi)有彈出臀规?感覺(jué)原因大概是,在之前已經(jīng)把textField.inputView = UIView()
設(shè)置了栅隐,導(dǎo)致覆蓋了系統(tǒng)的鍵盤(pán)塔嬉,UI已經(jīng)構(gòu)建好了再設(shè)置成nil,那個(gè)空view實(shí)際沒(méi)有remove掉租悄,網(wǎng)上說(shuō)系統(tǒng)會(huì)監(jiān)測(cè)inputView
,實(shí)際證明并沒(méi)有谨究。
已經(jīng)折騰將近一上午了!
于是遺憾的告訴產(chǎn)品經(jīng)理泣棋,這個(gè)需求暫時(shí)不能實(shí)現(xiàn)胶哲。(也可以畫(huà)一個(gè)假的光標(biāo),但是會(huì)產(chǎn)生很多沒(méi)用的代碼潭辈,覺(jué)得沒(méi)必要)鸯屿。
就在今天早上澈吨,我想調(diào)用removeFromSuperview
這個(gè)方法,但是突然出現(xiàn)了reloadInputViews
這個(gè)方法寄摆,咦谅辣?感覺(jué)昨天那個(gè)事情能成啊婶恼!迅速打開(kāi)昨天測(cè)試的項(xiàng)目桑阶,在textField.inputView = nil
下面加上textField.reloadInputViews()
。