iOS 9 之后iPhone 允许APP使用第三方键盘,但是有时候出于开发安全以及相关的需求,不希望用户使用第三方键盘.
近期遇到一个小问题:UITextField的keyboardType属性设置是UIKeyboardTypeNumberPad,此设置是强制使用系统的数字键盘,但是遇到个别机型设置问题,明明设置UIKeyboardTypeNumberPad,输入纯数字就啥事都没了,可是它弹出第三方键盘,导致能输入特殊字符[哭晕在小厕所],此刻好大的[问话脸]??! 虽然出现的是小概率,但是它的存在还是很辣眼睛.哼╭(╯^╰)╮
小bug送测肯定也通不过,要解决!!!
1. 自定义键盘:
如果需求只是针对数字的输入,优先使用自定义键盘,将inputView绑定自定义键盘,不会出现第三方键盘。然后这个方案完美的被我给pass掉了,感觉大材小用,O(∩_∩)O哈哈~
2. 切换App Delegate中shouldAllowExtensionPointIdentifier方法的返回值:
我们可以通过添加标识符的形式,如本地储存一个BOOL类型变量,绑定到shouldAllowExtensionPointIdentifier的返回值上,键盘弹起之前改变其值,而键盘弹起也会触动shouldAllowExtensionPointIdentifier的调用,但经过多次调试后,发现由于此方法会调用多次,并且第三方键盘会在系统键盘后出现,所以此方法没达到禁用第三方键盘的效果.
3. 利用UITextField的secureTextEntry属性:
如果我们把UITextField的secureTextEntry属性设置为Yes时,第三方键盘确实无法弹出,但是代价是输入的内容会变成密文黑点.以下是将密文变成明文的实现方法:
释放注册对象时,要记得在通知中心取消注册.
4. 正则表达式判断UITextField是否为全数字:
根据我目前的需求就要输入纯数字,只要过滤掉所以的特殊字符就行了,所以使用正则表达式明确规定输入的全数字,这个样子就不用考虑弹起的事系统的数字键盘还是弹起的第三方键盘,对输入的内容过滤也是很单一,代码量相比方法3 也少很多,因此我首选了此方法.以下实现方法:
判断条件不太多的话,可以优先考虑使用三目运算符,逻辑看上去会很清晰.