UITextField Caret在太大时停止移动

时间:2015-06-10 17:14:04

标签: ios objective-c uitextfield user-input caret

UITextField允许您覆盖子类中的-caretRectForPosition:。我希望插入符号涵盖文本字段的整个高度。

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    CGRect inherited = [super caretRectForPosition:position];
    inherited.origin.y = -50.0;
    inherited.size.height = 200.0;

    return inherited;
}

如果我把它做得太大(比如示例),它会停止用放大镜移动,有效地使用户无法切换到文本的另一部分。

为什么会这样,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为这只是在尝试使插入符号大于文本字段时的问题。它覆盖了唯一的整个编辑工作正常。

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    CGRect const inherited = [super caretRectForPosition:position];
    CGRect const rect = ({
        CGRect rect = inherited;
        rect.origin.y = 0.0;
        rect.size.height = CGRectGetHeight([self editingRectForBounds:self.bounds]);
        rect;
    });

    return rect;
}

奖励:如果您尝试将选择范围视图设置为相同的高度,请查看-selectionRectsForRange:并相应地调整所有rects的大小。您需要继承UITextSelectionRect以使其变为可变。