美文网首页
iOS键盘输入处理

iOS键盘输入处理

作者: 跃文 | 来源:发表于2019-04-18 10:50 被阅读0次
    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;
    }
    

    相关文章

      网友评论

          本文标题:iOS键盘输入处理

          本文链接:https://www.haomeiwen.com/subject/lilzwqtx.html