0

テキスト フィールドを使用せずにキーボードを表示したかったので、UIToolbar をサブクラス化し、UIKeyInput プロトコルに準拠させました。単純な NSLog プリントアウトを使用したテストに基づいて、ユーザーからのキー入力を正常に読み取っています。私の問題は、カスタム ツールバーと同じビュー コントローラーによって管理されるテーブル ビューを更新するために、キーボードに入力されたテキストが必要なことです。基本的に私の質問は次のとおりです。更新メソッドがカスタム ツールバー クラスにある場合、テーブル ビューを更新するように指示するにはどうすればよいですか? または、update メソッドがビュー コントローラー クラスにある場合、キーが押されるたびに確実に呼び出されるようにするにはどうすればよいでしょうか?

次のようにキーが押されたときにツールバーに通知を送信させようとしました:

- (void)insertText:(NSString *)text {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"keyPressed" object:self];

その後、View Controllerでリッスンします

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(updateForKeyPressed:) name:@"keyPressed" object:nil];

...

- (void)updateForKeyPressed:(NSNotification *)note {
   [self update];
}

これはうまくいきませんでしたが、オンラインの記事からアイデアを得たので驚くことではありませんでした。この時点で、私はほとんどボタンを連打しています。誰かが私を正しい方向に向けることができれば幸いです。いつものように、どんな助けでも大歓迎です。誰かが私のコードをもっと見たい場合は、お知らせください。投稿できます。

4

2 に答える 2

2

通知を使用すると正常に動作するはずです。コードをデバッグするために何をしましたか? 通知が投稿されていることを確認しますか? View Controller が通知センターに登録されていることを確認してください。-updateForKeyPressed:それが呼び出されていないことを確認しますか?

委任は、設定とデバッグが簡単なもう 1 つのオプションです。UITextView と同じように、View Controller 自体をツールバーのデリゲートとして設定し、テキストが変更されるたびにツールバーからデリゲートにメッセージを送信します。

留意すべき主な考え方は、ビューはビュー コントローラーを気にするべきではないということです。ビュー コントローラーがたまたまそのデリゲートであるため、ツールバーがビュー コントローラーにメッセージを送信することがありますが、そのデリゲートがビュー コントローラーであるという事実に依存するべきではありません。

于 2012-03-07T01:54:35.817 に答える
1

ビューコントローラーをuikeyinputに準拠させ、ツールバーのデリゲートをビューコントローラーに設定できるはずです

于 2012-03-07T01:55:36.907 に答える