iOS 開發(fā)第三方鍵盤沒被禁用的情況下,如何解決鍵盤輸入問題?

????iOS 9 之后iPhone 允許APP使用第三方鍵盤,但是有時候出于開發(fā)安全以及相關的需求,不希望用戶使用第三方鍵盤.

????近期遇到一個小問題:UITextField的keyboardType屬性設置是UIKeyboardTypeNumberPad,此設置是強制使用系統(tǒng)的數(shù)字鍵盤,但是遇到個別機型設置問題,明明設置UIKeyboardTypeNumberPad,輸入純數(shù)字就啥事都沒了,可是它彈出第三方鍵盤,導致能輸入特殊字符[哭暈在小廁所],此刻好大的[問話臉]??! 雖然出現(xiàn)的是小概率,但是它的存在還是很辣眼睛.哼╭(╯^╰)╮

????小bug送測肯定也通不過,要解決!!!

1. 自定義鍵盤:

????如果需求只是針對數(shù)字的輸入,優(yōu)先使用自定義鍵盤,將inputView綁定自定義鍵盤,不會出現(xiàn)第三方鍵盤。然后這個方案完美的被我給pass掉了,感覺大材小用,O(∩_∩)O哈哈~?

2. 切換App Delegate中shouldAllowExtensionPointIdentifier方法的返回值:

? ? 我們可以通過添加標識符的形式,如本地儲存一個BOOL類型變量,綁定到shouldAllowExtensionPointIdentifier的返回值上,鍵盤彈起之前改變其值,而鍵盤彈起也會觸動shouldAllowExtensionPointIdentifier的調(diào)用,但經(jīng)過多次調(diào)試后,發(fā)現(xiàn)由于此方法會調(diào)用多次,并且第三方鍵盤會在系統(tǒng)鍵盤后出現(xiàn),所以此方法沒達到禁用第三方鍵盤的效果??.

3. 利用UITextField的secureTextEntry屬性:

? ? 如果我們把UITextField的secureTextEntry屬性設置為Yes時,第三方鍵盤確實無法彈出,但是代價是輸入的內(nèi)容會變成密文黑點.??以下是將密文變成明文的實現(xiàn)方法:

自定義代理
實現(xiàn)代理方法
注冊通知中心
實現(xiàn)通知方法

????釋放注冊對象時,要記得在通知中心取消注冊.

4. 正則表達式判斷UITextField是否為全數(shù)字:

? ? 根據(jù)我目前的需求就要輸入純數(shù)字,只要過濾掉所以的特殊字符就行了,所以使用正則表達式明確規(guī)定輸入的全數(shù)字,這個樣子就不用考慮彈起的事系統(tǒng)的數(shù)字鍵盤還是彈起的第三方鍵盤,對輸入的內(nèi)容過濾也是很單一,代碼量相比方法3 也少很多,因此我首選了此方法.以下實現(xiàn)方法:

實現(xiàn)調(diào)用方法
正則表達式方法 ??

?????判斷條件不太多的話,可以優(yōu)先考慮使用三目運算符,邏輯看上去會很清晰.

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

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