UITextField
允许您覆盖子类中的-caretRectForPosition:
。我希望插入符号涵盖文本字段的整个高度。
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
CGRect inherited = [super caretRectForPosition:position];
inherited.origin.y = -50.0;
inherited.size.height = 200.0;
return inherited;
}
如果我把它做得太大(比如示例),它会停止用放大镜移动,有效地使用户无法切换到文本的另一部分。
为什么会这样,我该如何解决这个问题?
答案 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
以使其变为可变。