最近在重构公司一个项目的发帖模块,发帖模块内容颇多,一些用户交互的细节处理起来也比较复杂,最坑爹的一个就是计算光标位置并设置其偏移量滚动至可视的固定范围。
这是整体的布局
点击文本框的时候,弹出键盘并让光标正好处于键盘上方。编辑文字的时候,也需要随时自适应高度。
在textView的代理方法中通过
[textViewcaretRectForPosition:textView.selectedTextRange.start].origin.y
这个方法就可以计算光标的位置,这个方法在
- (void)textViewDidChange:(UITextView*)textView
这个代理方法中,也就是编辑文字的时候,计算的坐标的正确地,但是,在键盘弹起的时候,这个代理方法还没开始执行,我一开始是在这个
- (BOOL)textViewShouldBeginEditing:(UITextView*)textView
还有这个
- (void)textViewDidBeginEditing:(UITextView*)textView
这两个方法中计算光标的位置,但是计算的结果始终是错误的,我也尝试了各种方法,都没有用。这里花了我两天的时间才解决,原来还有一个代理方法。
- (void)textViewDidChangeSelection:(UITextView*)textView
这个代理方法也是在键盘弹出的时候就会执行,而且计算的坐标也是正确,终于解决了让键盘弹起的时候光标滚到固定的位置。