1

ツールバー付きのナビゲーションコントローラーがあります。キーボードが表示されたときにツールバーもキーボードの上に表示されるようにしました。キーボードを閉じると、ツールバーが消え、黒い四角形が画面の下部に残ります。これは、ツールバーがキーボードのない場所にあるはずです。

ツールバーを初期化する方法は次のとおりです。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setToolbarHidden:NO];

    // this makes sure the toolbar appears on top of the keyboard
    // instead of going below it.
    // _nameText is a UITextField
    _nameText.inputAccessoryView = self.navigationController.toolbar;
}

これは、キーボードを非表示にする方法です。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    [self.navigationController setToolbarHidden:NO]; // this doesn't help
    return NO;
}

もやってみ[self.view setNeedsLayout]ましたが、うまくいきませんでした。

編集:これは、ツールバーをテキストフィールドの入力アクセサリビューに割り当てているという事実に関係していると思われます。キーボードがなくなると、テキスト フィールドのアクセサリ ビューが非表示になると思います。ただし、その動作をオーバーライドする方法はまだわかりません。

編集 2:キーボードがなくなった後であることself.navigationController.toolbar.superviewがわかりました。nil

4

2 に答える 2

1

問題を正面から解決することはできませんでしたが、許容できる回避策を見つけました。

  1. ツールバーの .xib を作成します

  2. (1) からツールバーをオブジェクトにロードする

  3. inputAccessoryViewそのオブジェクトをテキストフィールドのプロパティに割り当てます

  4. このツールバーのボタンのターゲットとアクションを設定して、クリックに応答できるようにします

これですべての設定が完了しました。元のツールバー (おそらく Interface Builder で作成したもの) は、キーボードが非表示の場合にのみ表示されます。キーボードが表示されている場合、元のツールバーは表示されませんが、別のツールバー (上記の手順で作成) がキーボードの上に表示されます。ビンゴ!

誰かがこの問題に対するよりエレガントな解決策を持っているなら、私はそれについて聞いてうれしいです:)

于 2012-04-05T06:34:33.193 に答える
1

@BlackRider、私はあなたとまったく同じ問題に遭遇しました。それはかなり迷惑です。

2 つの異なる場所にあるツールバー ボタンの状態を処理したくなかったので、回避策として 2 つの異なるツールバーを設定したくなかったのです。

私は、通知を使用する回答でここで説明されているアプローチを使用することに頼りました: iPhone: How to fix inputAccessoryView to View?

問題なく動作しています。さまざまなデバイスのサイズや向きを試してみると、問題が発生するだろうというのが私の直感です。

于 2013-01-15T03:20:00.203 に答える