markedTextRange理解及使用 计算长度

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

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

/* If text can be selected, it can be marked. Marked text represents provisionally


 * inserted text that has yet to be confirmed by the user.  It requires unique visual

 * treatment in its display.  If there is any marked text, the selection, whether a

 * caret or an extended range, always resides witihin.

 *

 * Setting marked text either replaces the existing marked text or, if none is present,

 * inserts it from the current selection. */ 

@property (nullable, nonatomic, readonly) UITextRange *markedTextRange;  // Nil if no marked text. The range of text that is currently marked in a document. (required) (read-only)。

@property (nullable, nonatomic, copy) NSDictionary *markedTextStyle; // Describes how the marked text should be drawn.

- (void)setMarkedText:(nullable NSString *)markedText selectedRange:(NSRange)selectedRange; // selectedRange is a range within the markedText

- (void)unmarkText;


通过以上的说明,在解决上述问题的时候你需要判断markedTextRange是不是为Nil,如果为Nil的话就说明你现在没有未选中的字符,可以计算文字长度。否则此时计算出来的字符长度可能不正确。

代码片段:

1、 [self.textField addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged];


2、- (void)textDidChange:(id)sender {


UITextField *textField = (UITextField *)sender;


if (textField.markedTextRange == Nil) {

//一些计算

}




}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值