2009年11月18日水曜日

キーボードの表示制御 - resignFirstResponder と透明なボタン

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
OneLiner の作成は細々と続いている。今はこんな感じ。






詳細情報のビューではタイトルとメモの入力、それとカメラ取り込みができるようになっている(まだできていないが)。


さて詳細情報のビュー(以下、詳細ビュー)では、何も工夫しないと下記の場合キーボードが出っぱなしになってしまう。

  • 前回テキストフィールドにフォーカスがあたった状態で、詳細ビューを開く
  • テキストフィールドにフォーカスをあててしまった

このままだと画像が見えなくて困るのでキーボードを隠す必要がある。はじめてのiPhoneプログラミング によればフォーカスを外せばキーボードは自動的に隠れるとのこと。そこで次のタイミングでフォーカスを外す事ににした。

  • 詳細ビューが隠れる時
  • テキストフィールド以外をタッチした時
フォーカスを外すには全てのテキストフィールドに対して resignFirstResponder を投げれば良い。その為の小さなメソッドを書いた。
- (void)hideKeyboard
{
[textTitle resignFirstResponder];
[textMemo resignFirstResponder];
}

これを各タイミングで呼出せば良い。詳細ビューが隠れる時は UIViewController の viewWillDisappear をオーバーライドする。
- (void)viewWillDisappear:(BOOL)animated
{
[self hideKeyboard];
}


なおビューが隠れた後では遅いので viewDidDisappear はこの目的では使えない。

「テキストフィールド以外をタッチした時」は、画面を覆う透明なボタンを作り、それがタッチされた時に先ほどの hideKeyboard を呼出せば良い。このボタンは Interface Builder で Round Rect Button を配置し、ビュー一杯に広げた後に Type を Custom に変えると透明なボタンになる。




さらに他のコントロールの下へ来る様に Layout メニューで Send To Back を選び、背面へ移動させる。
上記ははじめてのiPhoneプログラミングで紹介されていた方法。大味な感じもするが他に方法がわからないので従うことにする。

- - - -
逆にテキストフィールドへフォーカスをあてたい場合はどうすれば良いのだろうか。新規登録時にはタイトルのフィールドへ自動的にフォーカスをあてたい。

0 件のコメント:

コメントを投稿