40

私はカスタム キーボードを作成しており、次のデリゲート メソッドをInputViewController.
しかし、私はいつも得ます_textInput = nil_

- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
- (void) selectionWillChange:(id<UITextInput>)textInput
- (void) selectionDidChange:(id<UITextInput>)textInput

誰もそれを修正する方法を知っていますか? 理由がありますか
? 自分で何かを実装する必要がありますか?nil

4

1 に答える 1

2

良い質問。しかし、それはあなたが実装UITextInputDelegateするプロトコルではないようです。

Lower Level Text-Handling Technologiesというタイトルの Apple Docs から:

外部の理由によりテキスト ビューで変更が発生した場合 (つまり、テキスト入力システムからの呼び出しによるものではない場合)、UITextInput オブジェクトは、、、、および メッセージtextWillChange:を入力デリゲート (参照を保持している) に送信する必要があります。たとえば、ユーザーがテキスト ビューをタップし、選択したテキストの範囲を設定して挿入ポイントを指の下に配置する 場合、選択した範囲を変更する前に送信 し、範囲を変更した後に送信します。textDidChange:selectionWillChange:selectionDidChange:selectionWillChange:selectionDidChange:

そしてUITextInputDelegateのドキュメントから:

UIKit は、クラスが UITextInput プロトコルを採用するオブジェクトの inputDelegate プロパティに、実行時に割り当てるプライベート テキスト入力デリゲートを提供します。

上記の意味は、これらのデリゲート メソッドを実装していないということです。inputDelegateこれらを使用して、キーボード入力以外の方法でテキストまたは選択を変更したことを に通知します。

これを説明するメソッドの例を次に示します。

- (void)delete:(id)sender;
{
    if (selection && ![selection isEmpty]) {
        [inputDelegate textWillChange:self];
        [inputDelegate selectionWillChange:self];
        [self replaceRange:selection withText:@""];
        [inputDelegate selectionDidChange:self];
        [inputDelegate textDidChange:self];
    }
}

ここに他の例を含むサンプルコード。

于 2015-04-11T10:19:39.290 に答える