iOS 如何获取光标的位置

经常有这样一种需求,当我们在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

你可能感兴趣的:(iOS 如何获取光标的位置)