UITextField 的字数限制相关的方法

记录下,项目中用的两种限制UITextField 的字数的方式,各有利弊。

第一种方式:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField {
    if (textField.tag == 0) {
        
    NSInteger kMaxLength = 15;
    
    NSString *toBeString = textField.text;
    NSString *lang = [[UIApplication sharedApplication]textInputMode].primaryLanguage; //ios7之前使用[UITextInputMode currentInputMode].primaryLanguage
    if ([lang isEqualToString:@"zh-Hans"]) { //中文输入
        UITextRange *selectedRange = [textField markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        if (!position) {// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            
            if (toBeString.length > kMaxLength) {
                NSString *str = [NSString stringWithFormat:@"最多输入%ld个字符!",kMaxLength];
                flToast(str);
                textField.text = [toBeString substringToIndex:kMaxLength];
            }
        }
        else{//有高亮选择的字符串,则暂不对文字进行统计和限制
        }
    }else{//中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        if (toBeString.length > kMaxLength) {
            textField.text = [toBeString substringToIndex:kMaxLength];
        }
    }
        
    }
}

第二种方式:

#pragma mark - UITextFieldDelegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSInteger tag = textField.tag;
    if (tag == 0 ) {
        // 姓名(最多10位)
        if (string.length == 0)
            return YES;
        NSInteger existedLength = textField.text.length;
        NSInteger selectedLength = range.length;
        NSInteger replaceLength = string.length;
        if (existedLength - selectedLength + replaceLength > 10) {
            return NO;
        }
    }
    if (tag == 1 ) {
        // 身份证号(最多18位)
        
        if (string.length == 0)
            return YES;
        NSInteger existedLength = textField.text.length;
        NSInteger selectedLength = range.length;
        NSInteger replaceLength = string.length;
        if (existedLength - selectedLength + replaceLength > 18) {
            return NO;
        }
        NSString *charaSets = @"Xx0123456789";
        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:charaSets] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
        return [string isEqualToString:filtered];
    }
    if (tag == 2 ) {
        // 手机号(最多18位)
        if (string.length == 0)
            return YES;
        NSInteger existedLength = textField.text.length;
        NSInteger selectedLength = range.length;
        NSInteger replaceLength = string.length;
        if (existedLength - selectedLength + replaceLength > 11) {
            return NO;
        }
    }
    
    return YES;

}

你可能感兴趣的:(UITextField 的字数限制相关的方法)