詳細情報のビューではタイトルとメモの入力、それとカメラ取り込みができるようになっている(まだできていないが)。
さて詳細情報のビュー(以下、詳細ビュー)では、何も工夫しないと下記の場合キーボードが出っぱなしになってしまう。
- 前回テキストフィールドにフォーカスがあたった状態で、詳細ビューを開く
- テキストフィールドにフォーカスをあててしまった
このままだと画像が見えなくて困るのでキーボードを隠す必要がある。はじめてのiPhoneプログラミング によればフォーカスを外せばキーボードは自動的に隠れるとのこと。そこで次のタイミングでフォーカスを外す事ににした。
なおビューが隠れた後では遅いので viewDidDisappear はこの目的では使えない。
「テキストフィールド以外をタッチした時」は、画面を覆う透明なボタンを作り、それがタッチされた時に先ほどの hideKeyboard を呼出せば良い。このボタンは Interface Builder で Round Rect Button を配置し、ビュー一杯に広げた後に Type を Custom に変えると透明なボタンになる。
さらに他のコントロールの下へ来る様に Layout メニューで Send To Back を選び、背面へ移動させる。
上記ははじめての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 件のコメント:
コメントを投稿