iOS UITextField 字数限制

热门标签

,

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

用UItextField的代理方法来限制字数或即时判断输入内容有效性等问题的时候是不能完美满足需求的,这篇文章介绍另一种方法可能对你有很大启发。因为UItextField和UIbutton一样是继承于UIControl的,所以是可以addTarget的,如下:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

然后实现textFieldDidChange:的方法,这个方法在输入或删除每个字符的时候都会调用。

- (void)textFieldDidChange:(UITextField *)textField {
    
    NSString *toBeString = [textField.text lowercaseString];
    textField.text = toBeString;
    //限制字数
    _limitNum = 16;
    
    //获取高亮部分
    UITextRange *selectedRange = [textField markedTextRange];
    UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
    
    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position||!selectedRange)
    {
        if (toBeString.length > _limitNum)
        {
            NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:_limitNum];
            if (rangeIndex.length == 1)
            {
                textField.text = [toBeString substringToIndex:_limitNum];
            }
            else
            {
                NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, _limitNum)];
                textField.text = [toBeString substringWithRange:rangeRange];
            }
        }
    }
    
    //commitButton 是否可以点击
    if (_newPasswordTextField.text.length>5&&_confirmPasswordTextField.text.length>5&&_newPasswordTextField.text.length==_confirmPasswordTextField.text.length) {
        _commitButton.backgroundColor = SAColorByRGB(0, 124, 246);
        _commitButton.userInteractionEnabled = YES;
    }else{
        _commitButton.backgroundColor = SAColorByRGB(219, 219, 219);
        _commitButton.userInteractionEnabled = NO;
    }
    
    //实时查看密码格式是否正确
    if (textField == _newPasswordTextField) {
        if (_newPasswordTextField.text.length>5) {
            if ([self isNumberWithLetterType:_newPasswordTextField.text]) {
                _newPasswordTextField.type = SAFloatLabeledTextFieldTypeNormal;
            }else{
                _newPasswordTextField.type = SAFloatLabeledTextFieldTypeWrong;
            }
        }else{
            _newPasswordTextField.type = SAFloatLabeledTextFieldTypeNormal;
        }
        
    }

}
/** 判断是否是数字+字母 16位*/
- (BOOL)isNumberWithLetterType:(NSString *)string {
    NSString *regex = @"(?=.*\\d)(?=.*[a-zA-Z]).{1,16}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    return [pred evaluateWithObject:string];
}

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《iOS UITextField 字数限制》 发布于2019-10-09

分享到:
赞(0)

评论 抢沙发

2 + 1 =


iOS UITextField 字数限制

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录