本文主要是关于UITextView的几个代理方法的说明,因为踩过坑,所以在此处记录一下。
代理方法一:
- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text;
这个方法是在键盘上输入的时候会调用,无论是预输入(打拼音汉子未显示的称呼)还是直接输入,都会调用,并且在掉用这个方法之后,系统会调用- (void)textViewDidChange:(UITextView*)textView 2次。我的理解是,第一次调用是因为调用了shouldChange方法,第二次调用则是因为文字变化了,会调用。
代理方法二:
- (void)textViewDidChange:(UITextView*)textView;
每次内容改变的时候都会调用。
代理方法三:
- (void)textViewDidChangeSelection:(UITextView*)textView;
这个方法是在光标移动的时候会调用,可以在此处控制光标的位置。
重点:最近是在做@功能,对这个几个方法研究的比较多,多次测试后,已经基本上可以满足需求。
按以下步骤执行:
1. 在shouldChangeTextInRange方法处理“光标处于@内容中”,键盘删除的时候,把整个@内容删除;
2在textViewDidChange方法中处理“内容添加和内容减少”,将整个内容的@部分变色
注:此处在textViewDidChange中处理变色问题,而不是在shouldChangeTextInRange中处理,原因是因为,预输入字母到显示视图上,字母之间都会添加空格,而且表情等一些特殊的字符长度不一样,导致在shouldChangeTextInRange中处理的时候,越来越复杂,到最后发现判断不清楚。这个小问题花了2天时间!