iOS禁用第三方输入法

当我们需要用户输入数字时,我们会将键盘类型设置为 UIKeyboardTypeNumberPadUIKeyboardTypePhonePadUIKeyboardTypeDecimalPad 等数字类型的键盘。但是如果用户使用了第三方输入法(比如搜狗),那就无法达到强制输入数字的目的了,因为搜狗输入法在这些 UIKeyboardType 枚举类型中,除了常规的 0~9 数字键外,还额外带了其他符号键,用户可以输入一些特殊字符,此时如果想要达到效果,就只能通过重写遵守 UITextFieldDelegate 并实现 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 方法,在这里通过正则判断用户输入的是否为数字。

如果不想这么麻烦,那就干脆直接禁用第三方输入法吧 :)

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(UIApplicationExtensionPointIdentifier)extensionPointIdentifier {
    if ([extensionPointIdentifier isEqualToString:UIApplicationKeyboardExtensionPointIdentifier]) {
        return NO;
    }
    return YES;
}

PS:如果 secureTextEntry 属性为 YES,那么将会强制使用系统键盘,不管你有没有禁用第三方输入法,苹果这是为了安全考虑。