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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top