デリゲートメソッド「clickedButtonAtIndex:」と呼ばれていません
-
22-09-2019 - |
質問
私は、次のコードを使用して2つのボタンでアラートビューを作成しています:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];
私は、いずれかのボタンがクリックされたときに、いくつかのコードを実行したいです。 そうするためには、私はdelegate.mファイルに次のメソッドが追加されています:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==0) //Run some code
else //Other code
}
しかし、私はどちらかのボタンを押したときに、このメソッドは呼び出されません! なぜ誰かが私に言うことはできますか?
事前のおかげで、
Sagiftw
解決
delegate:nil
あなたは何の代表者は存在しません指定された場合は、はどのように警告表示は、デリゲートを関連付けるのでしょうか?
とその部分を交換してくださいdelegate:self
の代わります。
他のヒント
の代わりにゼロの自己へのデリゲートを設定してみてください。
私は呼んでいたUIAlertViewのdismissWithClickedButtonIndexの:アニメーション:の私も、キーボードのリターンキーを処理したかったので、UITextFieldのデリゲートメソッドからメソッドます:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField.tag == 1001) {
[textField resignFirstResponder];
[_alert dismissWithClickedButtonIndex:1 animated:YES];
}
return YES;
}
この方法でメソッドの alertView:clickedButtonAtIndex:を使用すると、適切なデリゲートを設定していても呼ばれることは決してありません。代わりの alertView:didDismissWithButtonIndex:のは、呼び出しません。だからではなく、このメソッドを実装します:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// your code here
}
あなただけのアラートビューのボタンを処理する場合にのみ、それらの最初の呼び出しclickedButtonAtIndexとdidDismissWithButtonIndexます。
の.hにUIActionSheetDelegateと.MでalertViewを作成している間は、上記の場合に行われるものとして自己にないnilをデリゲートを入れて置く。
この質問に対する正しい答えはdelegate:nil
です。しかし、デリゲートは、すでに自己に設定され、かつclickedButtonAtIndex
はまだ働いていない場合には、あなたがalertviewを示した後、別のビューコントローラ([self.navigationController popViewControllerAnimated:YES];
)をポップしているかどうかをチェックしてみてください。これも呼び出されていないclickedButtonAtIndex
することがあります。これは私に何が起こったのかです。
希望これが誰かを助けます。