1. 如何在我们的项目中强制使用系统键盘
- 在开发中我们经常会遇到用户使用第三方键盘的情况,而有时这些键盘需要进行特殊处理才能保证程序正常运行,但是如果我们强制app使用系统键盘就可以避免这些问题 ⇩
方法一:
在AppDelegate中设置其他键盘不允许弹出
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(nonnull UIApplicationExtensionPointIdentifier)extensionPointIdentifier {
if ([extensionPointIdentifier isEqualToString:@"com.apple.keyboard-service"]) {
return NO;
}
return YES;
}
-
补:
方法二:
在UITextField输入时若是将属性secureTextEntry
设置为YES
则不会弹出第三方键盘,只是显示的输入内容会变成小黑点
方法三:
自定义键盘
2 不想用户输入表情符时
可以再代理方法textField:shouldChangeCharactersInRange:replacementString:
中使用下面方法 ⇩
+ (BOOL)isForbiddenEmoij {
//不支持系统表情的输入
// activeInputModes
if ([[[UITextInputMode currentInputMode ]primaryLanguage] isEqualToString:@"emoji"]) {
return NO;
}
return YES;
}
3 限制用户输入内容长度
可以再代理方法textField:shouldChangeCharactersInRange:replacementString:
中调用下面方法 ⇩
+ (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string maxLength:(NSInteger)maxLength {
//敲删除键
if ([string length]==0) {
return YES;
}
//当输入框当前的字符个数大于maxLength的时候,就不让更改了(不能等于maxLength,因为如果等于maxLength,在输入框字符个数等于maxLength的情况下就不能进行粘贴替换内容了)
if ([textField.text length] > maxLength)
return NO;
//获得当前输入框内的字符串
NSMutableString *fieldText=[NSMutableString stringWithString:textField.text];
//完成输入动作,包括输入字符,粘贴替换字符
[fieldText replaceCharactersInRange:range withString:string];
NSString *finalText=[fieldText copy];
//如果字符个数大于18就要进行截取前边maxLength个字符
if ([finalText length] > maxLength) {
textField.text = [finalText substringToIndex:maxLength];
return NO;
}
return YES;
}
4 项目中需要金额输入时
可以再代理方法textField:shouldChangeCharactersInRange:replacementString:
中调用下面方法 ⇩
+ (BOOL)setMoneyInputTextField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *amountText = textField.text;
NSString *regStr = @"^[0-9]+(\\.[\\d]{0,1})?$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regStr];
BOOL match = [predicate evaluateWithObject:amountText];
if ([string isEqualToString:@""])
return YES;
//首位不能为.号
if (range.location == 0 && [string isEqualToString:@"."]) {
return NO;
}
//全0停止输入
if ([textField.text isEqualToString:@"000000"]) {
return NO;
}
if ([textField.text rangeOfString:@"."].location != NSNotFound && [string isEqualToString:@"."]) {
return NO;
}
NSString *tmpStr = [amountText stringByAppendingString:string];
NSString *numStr = [[tmpStr componentsSeparatedByString:@"."] firstObject];
NSInteger amount = [numStr integerValue];
if (([amountText integerValue] == 1000000) && (![string isEqualToString:@""]))
return NO;
BOOL result = [amountText isEqualToString:@""] ? YES : (match && ((amount <= 1000000)|| [string isEqualToString:@"."]));
return result;
}
网友评论