????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)方法:




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


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