例えば、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 件のコメント:
コメントを投稿