对于UITextField控件, 常规的属性用法大家都很熟悉, 但依然有一些不常用的“遗珠”属性,今天来捡捡漏。
需求:
只输入字母和数字, 且字母需要全部大写
相信一部分同学会觉得不好处理, 是否需要监听UITextFieldTextDidChangeNotification,然后判断输入的字符进行替换操作, 第三方搜狗键盘很多屏蔽操作无效,要怎么强制屏蔽等等问题。 。 不着急, 一步步处理。
-
强制开启系统键盘
首先,设置键盘类型,textField.keyboardType = UIKeyboardTypeASCIICapable
其次,设置代理, 设置textField.secureTextEntry = YES;
实现代理方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.secureTextEntry = NO;
}
当我们设置了textField
为密码模式时,系统会自动屏蔽掉第三方键盘, 包括搜狗, 这样就不需要我们去额外判断键盘类型和模式了, 但此时我们的需求需要输入的内容明文显示, 那么在代理方法textFieldDidBeginEditing
内, 再改回明文模式即可。
-
字母连续大写
首先,设置自动大写类型:textField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
其次, 设置开启自动校正:textField.autocorrectionType = UITextAutocorrectionTypeYes;
系统有两个枚举属型:UITextAutocapitalizationType
和 UITextAutocorrectionType
typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
UITextAutocapitalizationTypeNone, // 不自动大写
UITextAutocapitalizationTypeWords, // 单词首字母大写
UITextAutocapitalizationTypeSentences, // 句子首字母大写
UITextAutocapitalizationTypeAllCharacters, // 所有祖母大写
};
typedef NS_ENUM(NSInteger, UITextAutocorrectionType) {
UITextAutocorrectionTypeDefault, // 默认
UITextAutocorrectionTypeNo, // 自动校正
UITextAutocorrectionTypeYes, // 不自动校正
};
根据这两个属性值, 搭配代理,就可方便的设置输入内容为字母且连续大写了:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.secureTextEntry = NO;
textField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
textField.autocorrectionType = UITextAutocorrectionTypeYes;
}
以上, 完结。
经过测试新一轮检测, 发现这种处理方式有时候还是无法完全实现强制屏蔽第三方键盘, 那可看情况使用下面的代码:
-
全局屏蔽第三方键盘
在AppDelegate.m
中实现下面这个方法
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier{
if ([extensionPointIdentifier isEqualToString:@"com.apple.keyboard-service"]) {
return NO;
}
return YES;
}