iOS markedTextRange

 

在开发的时候大家有时候会遇见这样的问题:在使用UITextField或UITextView实时实时计算content的长度的时候会出现一些偏差,如何准确的去计算统计这些字符呢?

可以发现UITextField或UITextView输入文字的时候输入的文字会有两个状态——选中与未选中。在实时计算长度的时候肯定计算的是选中后的text,那如何区分这个状态呢?这是就用到了markedTextRange。

在做输入中文的时候,系统自带的键盘不可避免的会产生上图的问题,本文就主要解决边输入边重新赋值时,中文输入时的高亮会被当做文本的小bug。

UITextRange *selectedRange = [textView markedTextRange]; 

  if selectedRange {
    return
  }

//或着
// NSString * newText = [textView textInRange:selectedRange];    //获取高亮部分   
// if(newText.length>0)  
// {   
//     return;
// }

例:textView

- (void)textViewDidChange:(UITextView *)textView
 {               
  UITextRange *selectedRange = [textView markedTextRange];           
  UITextRange *selectedRange = [textView markedTextRange]; 

  if selectedRange {
    return
  }

//或着
// NSString * newText = [textView textInRange:selectedRange];    //获取高亮部分   
// if(newText.length>0)  
// {   
//     return;
// }
  
  //给textView重新赋值(转化为富文本之类)
  、、、、
 }

例:textField

[self.textField addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged];
 
- (void)textDidChange:(UITextField *)textField
 {    
    UITextRange *selectedRange = [textField markedTextRange]; 

    if selectedRange {
        return
    }

    //或着
    // NSString * newText = [textField textInRange:selectedRange];    //获取高亮部分   
    // if(newText.length>0)  
    // {   
    //     return;
    // }

   
    //给textView重新赋值(转化为富文本之类)
    、、、、
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值