4

カスタムUITextInputベースのテキスト エディタを使用しています。マークされたテキストを介した多段階入力を除いて、非常にうまく機能します。

マークされた領域が正しくレンダリングされ、マークされたテキストが挿入されますが、キーボードの上の候補リストが空白です。

たとえば、標準の UITextView で候補を表示する日本語 (かな) キーボードは次のとおりです。

デフォルトのマーク付きテキスト

そして、これが同じマークされたテキストを表示するカスタム エディターです。

ここに画像の説明を入力

この問題のデバッグに数日を費やしたところ、原因はメソッドに対してUIKeyboardImpl返されたプライベート クラスであることがわかりましたNOdelegateSupportsCorrectionUI

このメソッドをカテゴリ on でオーバーライドして代わりにUIKeyboardImpl返すYESと、テキスト エディターで多段階の入力候補が正しく表示されます。ただし、これは問題の根本的な原因に対処していません (そして使用できません)。

また、Apple の SimpleTextInput サンプル コードも詳しく調べました。これにより、基本的な Core Text エディターが実装されます。SimpleTextInput は多段階の入力候補を正しく表示しますが、その実装に単一の違いを見つけることができず、UITextInputそれが機能し、私のものが壊れているようには見えません。

(実際、SimpleTextInput サンプルのマルチステージ入力を表示する機能を「壊す」ことはできません。そのため、UITextInput実装に重点を置いているのは間違っていると思います。それはまったく別のことです。)

4

1 に答える 1

3

わかりました、これは少し恥ずかしいです。私は今気づいた:

@property(nonatomic, readonly) UIView *textInputView

討論

テキストを描画し、このプロトコルのすべての幾何学的値の座標系を提供するビュー。(これは通常、UITextInput 採用クラスのインスタンスです。) このプロパティが実装されていない場合、レスポンダー チェーンの最初のビューが選択されます。

ドキュメントで。

私は@synthesizeばかげてこのプロパティを作成し、それを忘れていました。つまり、私の UITextInput 実装はnil textInputView. 単に未実装のままにしておくと、前述のようにレスポンダー チェーンから最初のビューが選択されます。これにより、自動修正と多段階の入力提案を処理するために必要な座標系がテキスト システムに提供されます。

これは、3 日間のデバッグの後でした。今、私は愚かだと感じています。

于 2013-11-27T16:36:40.593 に答える