La méthode déléguée « de clickedButtonAtIndex: » n'est pas appelé
-
22-09-2019 - |
Question
J'ai créé une vue d'alerte avec deux boutons en utilisant le code suivant:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];
Je veux exécuter un code lorsque l'un des boutons est cliqué. Pour le faire, je l'ai ajouté la méthode suivante au fichier delegate.m:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==0) //Run some code
else //Other code
}
Mais cette méthode est appelée lorsque je presse l'un des boutons! Quelqu'un peut-il me dire pourquoi?
Merci à l'avance,
Sagiftw
La solution
delegate:nil
comment l'affichage des alertes associera un délégué si vous avez spécifié il n'y aura pas les délégués? Remplacer cette partie avec
delegate:self
au lieu.
Autres conseils
Essayez de régler le délégué à l'auto au lieu de zéro.
J'appelais de UIAlertView dismissWithClickedButtonIndex: animation: méthode de méthode déléguée UITextField parce que je voulais gérer la clé du retour du clavier ainsi:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField.tag == 1001) {
[textField resignFirstResponder];
[_alert dismissWithClickedButtonIndex:1 animated:YES];
}
return YES;
}
Cette méthode de façon alertView: clickedButtonAtIndex: ne sera jamais appelé, même si vous configurez délégué approprié. Au lieu de cela alertView: didDismissWithButtonIndex: ne s'appelle. mettre en œuvre donc cette méthode à la place:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// your code here
}
Si vous voulez juste gérer les boutons d'alerte vue seulement, les premiers clickedButtonAtIndex d'appel, puis didDismissWithButtonIndex.
.h mettre UIActionSheetDelegate et .m tout en créant un alertView mettre le délégué à l'auto non nul comme étant fait dans le cas ci-dessus
La bonne réponse à cette question est delegate:nil
. Mais dans le cas où le délégué est déjà réglé sur soi-même, et le clickedButtonAtIndex
ne fonctionne toujours pas, essayez de vérifier si vous popping un autre contrôleur de vue (de [self.navigationController popViewControllerAnimated:YES];
) après avoir montré la alertview. Cela peut également entraîner à clickedButtonAtIndex
pas appelé. Ce qui est arrivé à moi.
Espérons que cela aide quelqu'un.