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