UITextView文字输入长度限制

可以发现UITextView或UITextField输入文字的时候,输入文字会有两种状态----选中和未选中状态。在实际计算长度的时候可定是计算的是选中后的text。

markedTextRange 使用:

@property (nullable, nonatomic, readonly) UITextRange *markedTextRange; 
// Nil if no marked text.

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

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

2、- (void)textDidChange:(id)sender { 
UITextField *textField = (UITextField *)sender; 
UITextRange *selectedRange = [textView markedTextRange];  
    //获取高亮部分  
    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];   
    //如果在变化中是高亮部分在变,就不要计算字符了  
    if (selectedRange && pos) {  
        return;  
    }  
// 一些计算 
 
} 

/* 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的话就说明你现在没有未选中的字符,可以计算文字长度。否则此时计算出来的字符长度可能不正确。

你可能感兴趣的:(UITextView文字输入长度限制)