iOS 输入框长度限制处理中文情况


// 输入框变化
- (void)textFieldValueChanged:(UITextField *)textField {
    if (textField == self.nameItemView.textF) {
        BOOL isInputOK = [self textFieldLimtWithMaxLength:20 textField:textField]; // 用户名最多20个字符
        if (isInputOK) { // 中文输入一半的情况,不刷新
            [self updateAllUIStatus];
        }
    } else {
        [self updateAllUIStatus];
    }
}

/// 处理包含中文的输入框长度  【在 textFieldValueChanged 代理中添加这个方法就OK】
- (BOOL)textFieldLimtWithMaxLength:(int)maxTextLength textField:(UITextField *)textField {
    NSString *toBeString = textField.text;
    NSString *resultString = textField.text;//业务逻辑
    NSString *lang = textField.textInputMode.primaryLanguage; // 键盘输入模式
    if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange *selectedRange = [textField markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            //业务逻辑
            if (toBeString.length > maxTextLength) {
                textField.text = [toBeString substringToIndex:maxTextLength];
                resultString = [textField.text substringToIndex:maxTextLength];
            } else {
                resultString = textField.text;
            }
            textField.text = resultString; // 赋值
        } else {
            return NO; // 中文输入中...不赋值
        }
        // 有高亮选择的字符串,则暂不对文字进行统计和限制
    } else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        //业务逻辑
        if (toBeString.length > maxTextLength) {
            textField.text = [toBeString substringToIndex:maxTextLength];
            resultString = [textField.text substringToIndex:maxTextLength];
        } else {
            resultString = textField.text;
        }
        textField.text = resultString; // 赋值
    }
    return YES; // 输入完成
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容