iOS开发禁用第三方键盘,强制使用系统键盘

        iOS 9 之后IPhone允许APP使用第三方键盘,但我们开发时为了安全考虑,有时不想让用户使用第三方键盘,因此很多人可能会使用如下方法:

        该方法会在某个APP内部全局禁止第三方键盘,而如果我们的需求是只在指定页面或者指定输入框禁止第三方键盘,其余页面不受影响时,此时我们就容易一时摸不着头脑。如:当用户输入的内容为交易密码这类敏感信息时,需要禁止第三方键盘。

        以下为几种解决思路:

        1.自定义键盘。如果需求只是针对数字的输入,优先使用自定义键盘,将inputView绑定自定义键盘,不会出现第三方键盘。

        2.切换App Delegate中shouldAllowExtensionPointIdentifier方法的返回值。我们通过添加标识符的形式,如本地化储存一个BOOL类型变量,绑定到shouldAllowExtensionPointIdentifier的返回值上,键盘弹起之前改变该值,而键盘弹起的也会触动shouldAllowExtensionPointIdentifier的调用。但经过尝试多次后,发现由于shouldAllowExtensionPointIdentifier方法会调多次,并且第三方键盘会在系统键盘后出现,所以该方法无法实现禁止第三方键盘的效果。

        3.利用UITextField的secureTextEntry属性。如果我们把UITextField的secureTextEntry属性设为YES时,第三方键盘确实是无法弹出的,代价是输入的内容会变成密文黑点。以下是将密文变成明文的实现方法:

实现UITextField代理方法


注册通知中心


实现通知调用的方法


        个人感觉在出现键盘之前,系统会先尝试判断一下secureTextEntry属性的值,然后确定弹出的键盘是否带一个像地球仪一样图标(用于切换键盘的按键)的键盘,此时我们可以在键盘出来后把secureTextEntry属性值换掉,这样的话键盘是不切换的,内容也不会变成密文黑点。

        话说回来,如果有自定义键盘,还是建议优先使用自定义键盘,防患于未然。