zoukankan      html  css  js  c++  java
  • 限制中文字符长度

    效果是这样,在一个文本框内,限制字符最大长度为9,当超过这个长度时,即使能输入,也会被截取

    _textField = [[UITextField alloc] initWithFrame:CGRectMake(14, 3, kScreenWidth-18, 34)];
    _textField.placeholder = @"设置个性昵称(不能超过9个字符)";
    _textField.delegate = self;
    _textField.textColor = [UIColor grayColor];
    _textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [textFieldBg addSubview:_textField];

    若是只有英文、数字等字符,可以用

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSString *str = [NSString stringWithFormat:@"%@",textField.text,string];
        if (str.length > 9) {
            return NO;
        }
        return YES;
    }

    但若出现汉字时,该方法就失效。需要用其它代替

    [_textField addTarget:self action:@selector(limitStrLength:) forControlEvents:UIControlEventEditingChanged];
    -(void)limitStrLength:(UITextField *)sender
    {
        bool isChinese;//判断当前输入法是否是中文
        if ([[sender.textInputMode primaryLanguage] isEqualToString: @"en-US"]) {
            isChinese = false;
        } else {
            isChinese = true;
        }
        
        if(sender == _textField) {
            NSString *str = [_textField text];
            if (isChinese) { //中文输入法下
                UITextRange *selectedRange = [_textField markedTextRange];
                //获取高亮部分
                UITextPosition *position = [_textField positionFromPosition:selectedRange.start offset:0];
                // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
                if (!position) {
                    if ( str.length>=9) {
                        NSString *strNew = [NSString stringWithString:str];
                        [_textField setText:[strNew substringToIndex:9]];
                    }
                } else {
                    NSLog(@"输入的英文还没有转化为汉字的状态");
                }
            }else{
                if ([str length]>=9) {
                    NSString *strNew = [NSString stringWithString:str];
                    [_textField setText:[strNew substringToIndex:9]];
                }
            }
        }
    }

     然后上边的那个代理方法也可以删除了

  • 相关阅读:
    session
    .net core 入坑经验
    .net core 入坑经验
    .net core 入坑经验
    一段刚刚出炉的CSV文件转换为DataTable对象的代码
    Github的一般用法
    SQLite简单使用记录
    一次SQLServer数据库宕机问题
    B样条基函数(cubic spline basis)
    matlab使用
  • 原文地址:https://www.cnblogs.com/Apologize/p/5227494.html
Copyright © 2011-2022 走看看