3

UITextInputCoreText を使用し、プロトコルに準拠するカスタム UITextView (EGOTextView に基づく) を実装しています。1つの厄介なことを除いて、ほとんどすべてが正常に機能しています(うわー!)。オートコレクトの提案テキストは垂直方向にミラーリングされ、そのハイライトはわずかに右に移動します。外観は次のとおりです。

ミラーリングされた自動修正

テキスト フィールドに「helo」と入力すると、「help」に自動修正されます。ご覧のとおり、オートコレクト テキストは垂直方向にミラーリングされていますが、その背景はミラーリングされていません。また、水平方向に右に ~7pt オフセットされています。

2 番目の問題 (水平オフセット) に対処するために、firstRectForRange:メソッドが正しい を返すことを確認しましたCGRect。私はこれを2つの方法で行いました。UIMenuController最初は、 a を表示すると正しい場所に表示されることを視覚的に確認することでした(表示されます)。CGRect2 つ目は、返された byの周りに輪郭を描くことfirstRectForRange:です。CGRectこれは、アウトライン化された同じテキストです。

アウトライン化された CGRect

ご覧のとおり、正しい領域の輪郭が描かれていますが、オートコレクトは間違ってマーク/強調表示されています。

どんなコードでも喜んで共有しますが、それは巨大なクラスであり、今ではかなり困惑しています。どんなポインタでも大歓迎です!

編集:ソース コードは、このリポジトリの Experimental ブランチで入手できます: github.com/cbrauchli/EGOTextView

4

2 に答える 2

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 に答える
1

コードを試しているときに同じ問題に直面しましたが、実装する必要がないことがわかりました

- (UIView *)textInputView {
    return _textContentView;
}

詳細については、 Apple のドキュメント(通常、これは UITextInput 採用クラスのインスタンスです) を参照してください。そして、このメソッドの実装を維持したい場合は、UITextInput 採用クラスのインスタンスをreturn selfここに示します。self (EGOTextView)

最後にこれを試してみましたが、うまくいきます。

于 2012-11-20T06:37:55.847 に答える