iOS开发中输入框的英文和中文的字数限制

iOS 开发中经常需要限制UITextView输入的字数,但是中文输入时会有一些问题,因为输入中文时有时输入的英文还没有转化为汉字的状态,如下图:


一个UITextView,限定只能输入10个字,但是用中文输入法,输入到6个就会给我自动填充为英文。例如我中文输入法输入“苹果开发”

textView shouldChangeTextInRange给我截取成“ping guo k”,我加了个侦听textViewDidChange,无法实现中文输入,是否有办法解决这个问题呢?

以下是我的解决方案代码:(实现UITextView的一个代理方法)

#pragma mark -textView输入内容改变代理方法
- (void)textViewDidChange:(UITextView *)textView{
    bool isChinese;//判断是否是中文
   
    if ([[[UIApplication sharedApplication]textInputMode].primaryLanguage isEqualToString: @"en-US"]) {
        isChinese = false;
    }else{
        isChinese = true;
    }

    //要求输入最多40位字符
    NSString *str = [[textView text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
    if (isChinese) { //中文输入法下
        UITextRange *selectedRange = [textView markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            NSLog(@"输入的是汉字");
            if ( str.length>=401) {
                NSString *strNew = [NSString stringWithString:str];
                [textView setText:[strNew substringToIndex:40]];
            }
        }else{
            NSLog(@"英文还没有转化为汉字");
        }
    }else{
        if ([str length]>=41) {
            NSString *strNew = [NSString stringWithString:str];
            [textView setText:[strNew substringToIndex:400]];
        }
    }
}


UITextField实现方法类似,监听UIControlEventEditingChanged事件即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值