我正在使用CoreText实现自定义UITextView(基于EGOTextView)并符合UITextInput
协议。我几乎一切都工作得很好(p!),除了一件烦人的事情。自动更正建议文本垂直镜像,其突出显示略微向右移动。这是它的样子:
在文本字段中,我输入了“helo”,它自动修正为“help”。如您所见,自动更正文本(而非背景)是垂直镜像的。此外,它正在向右偏移~7pt。
为解决第二个问题(水平偏移),我已验证firstRectForRange:
方法返回正确的CGRect
。我已经用两种方式做到了这一点。第一个是目测检查当我显示UIMenuController
时,它显示在正确的位置(确实如此)。第二个是围绕CGRect
返回的firstRectForRange:
绘制轮廓。这是与CGRect
概述的相同文本。
如您所见,概述了正确的区域,但自动更正标记/突出显示不正确。
我很高兴分享任何代码,但这是一个庞大的课程,我现在很难过。任何指针都会受到大力赞赏!
编辑:此存储库的Experimental分支上提供了源代码:github.com/cbrauchli/EGOTextView。
答案 0 :(得分:1)
我在尝试你的代码时遇到了同样的问题,我发现没有必要实现
- (UIView *)textInputView {
return _textContentView;
}
请参阅Apple documentation(这通常是UITextInput采用类的一个实例。)以获取更多帮助。
如果你想继续实现这个方法,只需要return self
,因为这里self (EGOTextView)
是UITextInput采用类的一个实例。
我在最后尝试了这个并且工作正常。
答案 1 :(得分:1)
@implementation EGOContentView
@synthesize delegate=_delegate;
- (id)initWithFrame:(CGRect)frame {...}
添加:
- (void)addSubview:(UIView *)view
{
if([view isKindOfClass:NSClassFromString(@"UIAutocorrectInlinePrompt")])
{
view.layer.geometryFlipped = !view.layer.geometryFlipped;
}
[super addSubview:view];
}
我要说的只是猜测。 当翻转EGOTextView的图层的几何图形时没有上面的代码就可以了,但是文本是颠倒的。 所以我的猜测是系统变得“混乱”(可能是一个错误?)因为它会检查EGOTextView的图层几何体是否被翻转并根据它调整UIAutocorrectInlinePrompt的几何图形。但实际上EGOContentView的几何图形不是EGOTextView的翻转,而UIAutocorrectInlinePrompt视图是EGOContentView的子视图,但由于它是基于EGOContentView的superview图层进行“调整”的,所以它最终颠倒了。