例えば、UITextField にフォーカスを合わせて、値を入力し OK ボタンなどで各処理後にアラートを表示すると、アラートが表示後にキーボードが出てしまう状態に遭遇してしまった。
この表示されたキーボードを下げることが出来るなら良いが、AlertView の OK ボタンはキーボードに隠れてしまい、キーボードの Done や 完了ボタンを押しても下がらない。。。
ビューの endEditing:YES にしても変わらず。
こうなってくると大体どの View のキーボードなのかも分からない。。。
キーボードの表示の通知を取得して、View に存在するもののフォーカスを外すなどしても変わらず。
調べた所どうやらこれは、
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
メソッド内で、続けてアラートビューを出そうとしていることが原因のようだ。
続けてアラートビューを出したい場合は、
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
に記述しないと行けないとのこと。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { ... case 1: // OK // ここはだめ [self showAlert:@"OKしました。"]; break; default: break; } } - (void)showAlert:(NSString *)message { dispatch_async(dispatch_get_main_queue(), ^{ // メインスレッドに戻して呼び出す。 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"メッセージ" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; }); } - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: // キャンセル return; break; case 1: // OK ボタン // ここで呼ばないと行けない。 [self showAlert:@"OKしました。"]; break; default: break; } }
確かに、キーボードが隠れてしまう状況は発生しなくなった。
Written with StackEdit.
0 件のコメント:
コメントを投稿