经常有这样一种需求,当我们在UITextView中输入文字时,为了让键盘不挡住UITextView,我们都会监听键盘的出现和隐藏来移动某个view。但是,那只是让键盘不挡住UITextView,并不是让键盘不挡住光标,这两种是完全不同的需求,微博app发布文章时就是一个经典的例子。
如何让键盘不挡住光标?
方法一:获取这个光标对象,系统自然是没有提供这样的属性或者方法,所以这就需要我们自己去寻找。方法如下:
- (UIView *)getCursorInTextView:(UITextView *)textView {
for (UIView *subView in textView.subviews) {
if ([NSStringFromClass([subView class]) isEqualToString:@"_UITextContainerView"]) {
for (UIView *childView in subView.subviews) {
if ([NSStringFromClass([childView class]) isEqualToString:@"UITextSelectionView"]) {
UIView *cursor = [childView.subviews firstObject];
return cursor;
}
}
}
}
return nil;
}
方法二:其实我们获取光标,无非就是想拿到光标在屏幕中的位置,系统提供了一个方法:
CGRect caretRect = [textView caretRectForPosition:textView.selectedTextRange.end];
// 将获取到的光标frame转化到屏幕中去
CGRect rectInWindow = [textView convertRect:caretRect toView:nil];
// 最后将光标在屏幕中的位置跟键盘的frame比较一下即可
个人更加推荐方法2