複数のUIAlertViewを開くと、キーボードが自動的に閉じてから再び開くという奇妙な問題が発生しています。(別のUITextFieldからの)キーボードがあり、UIAlertViewを表示している場合、そのアラートを閉じると、別のアラートを開きます(didDismissWithButtonIndexで2番目のキーボードを開きます)。2つ目を閉じると、キーボードが閉じてから元に戻ります。2つ以上のアラートを続けてこれを試してみると、2番目のアラートが閉じられた後もキーボードは閉じますが、最後のアラートが閉じられるまで表示されません。問題は、キーボードデリゲート関数が呼び出されないため、却下されたことに応答できないことです。他のUI要素(テキストフィールドと画像)があり、キーボードを開くとシフトするため、閉じると画面に浮かび、奇妙に見えます。そのキーボードが自動的に閉じる理由はありますか?ありがとう
ところで、私はNSDictionaryオブジェクトのNSMutableArrayを使用して、アラートがすでに表示されている場合に表示する必要があるアラートをキューに入れます。一度に複数のアラートを作成して表示することはありません。
編集:これがサンプルコードです。これを実行すると、「1」を閉じた後、両方のアラートが開いている(0、1)のが表示され、その下に「0」が表示されます。「0」を閉じると、私が何を意味するかがわかります。キーボードは一時的に閉じたり開いたりしますが、デリゲート関数は呼び出されません。iを2より大きい値に設定すると、2番目のアラートを閉じた後もキーボードは閉じますが、最後のアラートが閉じられるまで閉じたままになります。また、UIAlertを1つだけ開いて、それぞれが却下されたときにキューから他のUIAlertを一度に1つずつ開いてみましたが、それでも同じ動作に気づきました。何か案は?
編集:もう少し掘り下げた後、通知UIKeyboardDidShowNotificationとUIKeyboardDidHideNotificationに登録すると、キーボードが自動的に閉じられて表示されたときに実際に起動されることがわかりました。基盤となるAPIの何が原因で発生しているのかを知りたいので、回避できることを願っています。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, 320, 48)];
[textField setDelegate:self];
[textField setBackgroundColor:[UIColor redColor]];
[window addSubview:textField];
[textField release];
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *) textField{
NSLog(@"textFieldShouldReturn called with %@", textField);
[textField resignFirstResponder];
return YES;
}
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
NSLog(@"textFieldDidBeginEditing called with %@", textField);
for (int i=0; i< 2; i++) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"test" message: [NSString stringWithFormat:@"%d", i] delegate:self cancelButtonTitle:NSLocalizedString(@"OK",@"") otherButtonTitles:nil];
[alert show];
[alert release];
}
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
NSLog(@"++++ textFieldShouldEndEditing %@", textField);
return YES;
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"++++ textFieldDidEndEditing %@", textField);
}