3

我正在使用 CoreText 实现自定义 UITextView(基于 EGOTextView)并符合UITextInput协议。除了一件烦人的事情外,我几乎所有东西都运行良好(呸!)。自动更正建议文本垂直镜像,其突出显示略微向右移动。这是它的样子:

镜像自动校正

在文本字段中,我输入了“helo”,它会自动更正为“帮助”。如您所见,自动更正文本(而不是其背景)是垂直镜像的。此外,它向右水平偏移约 7pt。

为了解决第二个问题(水平偏移),我已经验证该firstRectForRange:方法返回正确的CGRect. 我已经通过两种方式做到了这一点。第一个是目视检查当我显示 a 时UIMenuController它是否出现在正确的位置(确实如此)。二是围绕CGRect返回的 by画一个轮廓firstRectForRange:。这是与CGRect概述相同的文本。

概述 CGRect

如您所见,正确的区域被勾勒出来,但自动更正被错误地标记/突出显示。

我很乐意分享任何代码,但这是一个庞大的课程,我现在很困惑。任何指针将不胜感激!

编辑:源代码可在此存储库的 Experimental 分支上找到:github.com/cbrauchli/EGOTextView

4

2 回答 2

1

我在尝试您的代码时也遇到了同样的问题,我发现没有必要实现

- (UIView *)textInputView {
    return _textContentView;
}

请参阅Apple 文档(这通常是 UITextInput-adopting 类的一个实例。)以获取更多帮助。如果你想保持这个方法的实现,就return self从它开始,因为这里self (EGOTextView)是 UITextInput-adopting 类的一个实例。

我最后尝试了这个并且工作正常。

于 2012-11-20T06:37:55.847 回答
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 的超级视图层“调整”的,所以它最终会颠倒过来。

于 2012-11-25T02:26:42.037 回答