Die Delegate-Methode „clickedButtonAtIndex:“ wird nicht aufgerufen
-
22-09-2019 - |
Frage
Ich habe mit dem folgenden Code eine Alarmansicht mit zwei Schaltflächen erstellt:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];
Ich möchte Code ausführen, wenn auf eine der Schaltflächen geklickt wird.Dazu habe ich der Datei „delegate.m“ die folgende Methode hinzugefügt:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==0) //Run some code
else //Other code
}
Aber diese Methode wird nicht aufgerufen, wenn ich eine der Tasten drücke!Kann mir jemand sagen warum?
Dank im Voraus,
Sagiftw
Lösung
delegate:nil
Wie wird die Alarmansicht einen Delegierten verbinden, wenn Sie angegeben haben, dass es keine Delegierten geben wird? Ersetzen Sie diesen Teil durch
delegate:self
stattdessen.
Andere Tipps
Versuchen Sie, den Delegaten auf self statt auf nil zu setzen.
Ich habe Uialertviews angerufen entsend withclickedButtonIndex: Animated: Methode von der Uitextfield -Delegate -Methode, weil ich auch die Tastaturrückgabe -Taste verarbeiten wollte:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField.tag == 1001) {
[textField resignFirstResponder];
[_alert dismissWithClickedButtonIndex:1 animated:YES];
}
return YES;
}
Auf diese Weise Methode AlertView: ClickedButtonatIndex: Nie aufgerufen, auch wenn Sie den richtigen Delegierten einrichten. Stattdessen AlertView: diddismisswithbuttonIndex: wird angerufen. Implementieren Sie also stattdessen diese Methode:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// your code here
}
Wenn Sie nur die Schaltflächen der Warnansicht verarbeiten möchten, klickte der erste Anruf auf, und dann diddismisswithbuttonIndex.
In .h uiactionssheetdelegate und in .m, während eine Warnansicht erstellt wird
Die richtige Antwort auf diese Frage ist delegate:nil
. Aber für den Fall, dass der Delegierte bereits auf sich selbst eingestellt ist und die clickedButtonAtIndex
Funktioniert immer noch nicht, überprüfen Sie, ob Sie einen anderen Ansichts -Controller knallen ([self.navigationController popViewControllerAnimated:YES];
) nach der Anzeige der Warnansicht. Dies kann auch dazu führen clickedButtonAtIndex
nicht gerufen werden. Das ist mir passiert.
Hoffe das hilft jemandem.