美文网首页葵花宝典
UITextField输入限制汇总

UITextField输入限制汇总

作者: lym不解释 | 来源:发表于2017-01-16 11:58 被阅读48次

    iOS常用正则表达式

    1. textField输入金额、数字、整数、小数 输入判断
    #pragma mark - UITextFieldDelegate
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        
        NSString *toString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        
        if (toString.length) {
            NSString *stringRegex;
            if (textField == self.teamPriceTF || textField == self.masterPriceTF) {
                // 0~99999
                stringRegex = @"(\\+)?(([0]|(0[.]\\d{0,2}))|([1-9]\\d{0,4}(([.]\\d{0,2})?)))?";
            }
            else if (textField == self.prepayPriceTF) {
                // 1~9.9
                stringRegex = @"([1-9]{1}(([.]\\d{0,1})?))?"
            }
            else if (textField == self.personCountTF) {
                // 2~10
                stringRegex = @"[2-9]|10?";
            }
            else if (textField == self.timersTF) {
                // 1~999
                stringRegex = @"[1-9]\\d{0,2}?";
            }
            else if (textField == self.personCountTF) {
                // 2~10
                stringRegex = @"[2-9]|10?";
            }
            else if (textField == self.timersTF) {
                // 1~999
                stringRegex = @"[1-9]\\d{0,2}?";
            }
            NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stringRegex];
            BOOL flag = [phoneTest evaluateWithObject:toString];
            return flag;
        }
        return YES;
    }
    
    

    2.textField输入个数限制遇上输入法的问题

    2.1解决办法

    //最多输入120个字
    #pragma mark - UITextViewDelegate
    - (void)textViewDidChange:(UITextView *)textView{
        int kMaxLength = 120;
        NSString *toBeString = textView.text;
        //if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange *selectedRange = [textView markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            if (toBeString.length >= kMaxLength) {
                textView.text = [toBeString substringToIndex:kMaxLength];
                _countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
                [self.view endEditing:YES];
            }else{
                _countLabel.text = [NSString stringWithFormat:@"%d/120", (int)textView.text.length];
            }
        }
        
    }
    

    2.2.给textField添加一个方法

    [_textField addTarget:self action:@selector(editChange:) forControlEvents:UIControlEventEditingChanged];
    
    //最多输入6个字
    #define kMaxLength 6
     - (void)editChange:(UITextField*)textfield {
           NSString *toBeString = textfield.text;
           NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage; // 键盘输入模
           if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
                 UITextRange *selectedRange = [textfield markedTextRange];
                //获取高亮部分
                 UITextPosition *position = [textfield positionFromPosition:selectedRange.start offset:0];
                // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
                if (!position) {
                       if (toBeString.length > kMaxLength)  {
                        NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
                        if (rangeIndex.length == 1)  {
                            textfield.text = [toBeString substringToIndex:kMaxLength];
                        }
                        else {
                            NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kMaxLength)];
                            textfield.text = [toBeString substringWithRange:rangeRange];
                        }
                    }
                }
            }
            else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
                   if (toBeString.length > kMaxLength)  {
                        NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kMaxLength];
                        if (rangeIndex.length == 1) {
                            textfield.text = [toBeString substringToIndex:kMaxLength];
                        }
                        else  {
                            NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0,kMaxLength)];
                            textfield.text = [toBeString substringWithRange:rangeRange];
                        }
                    }
    }
    
    

    3.去掉首尾空格

    - (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
        // 将字符串首尾空格去掉
        textField.text = [textField.text  stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        return YES;
    }
    

    相关文章

      网友评论

        本文标题:UITextField输入限制汇总

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