美文网首页
iOS 输入框长度限制处理中文情况

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

作者: 小明2021 | 来源:发表于2024-02-29 17:23 被阅读0次
    
    // 输入框变化
    - (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; // 输入完成
    }
    
    

    相关文章

      网友评论

          本文标题:iOS 输入框长度限制处理中文情况

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