2010-03-29 12 views
6

ich eine Warnungsansicht mit zwei Tasten erstellt haben, mit dem folgenden Code:Die delegierte Methode „clickedButtonAtIndex:“ genannt wird, nicht

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title 
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil]; 
[alertView show]; 

Ich möchte einige Code ausgeführt werden, wenn eine der Schaltflächen geklickt wird. Um dies zu tun, ich habe die folgende Methode der delegate.m Datei hinzugefügt:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex==0) //Run some code 
else //Other code 
} 

Aber diese Methode nicht aufgerufen wird, wenn ich drücken Sie eine der Tasten! Kann mir jemand sagen warum?

Vielen Dank im Voraus,

Sagiftw

Antwort

39
delegate:nil 

Wie wird die Alarmansicht einen Delegaten assoziieren, wenn Sie angegeben haben, dass es keine Delegierten geben wird? Ersetzen Sie diesen Teil mit

delegate:self 

statt.

+0

Danke für die Hilfe! Ich habe es vergessen!!! =) – Sagiftw

+0

Danke das habe ich auch vergessen. – iBapu

3

Versuchen Sie, die Vertreter der Selbst statt Null zu setzen.

0

in .h setzen UIActionSheetDelegate und in .m beim Erstellen einer Alertview der Delegierten selbst setzte nicht nil als

im obigen Fall getan
2

ich UIAlertView die dismissWithClickedButtonIndex rufe: animated: Methode von UITextField Delegatmethode denn ich wollte die Tastatur Return-Taste als auch zu handhaben:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if (textField.tag == 1001) { 
     [textField resignFirstResponder]; 
     [_alert dismissWithClickedButtonIndex:1 animated:YES]; 
    } 
    return YES; 
} 

auf diese Weise Methode Alertview: clickedButtonAtIndex: nie, auch wenn Sie die richtigen einrichten Delegaten aufgerufen wird. Stattdessen alertView: didDississWithButtonIndex: wird aufgerufen. So implementieren diese Methode anstelle:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    // your code here 
} 

Wenn Sie gerade erst Alarm Ansicht der Tasten behandeln möchten, diese zuerst clickedButtonAtIndex Anruf und dann didDismissWithButtonIndex.

0

Die richtige Antwort für diese Frage ist delegate:nil. Aber falls der Delegierte bereits auf self gesetzt ist und die clickedButtonAtIndex immer noch nicht funktioniert, versuchen Sie zu überprüfen, ob Sie einen anderen View Controller ([self.navigationController popViewControllerAnimated:YES];) nach dem Anzeigen des Alertview aufrufen. Dies kann auch dazu führen, dass clickedButtonAtIndex nicht aufgerufen wird. Das ist mir passiert.

Ich hoffe, das hilft jemandem.

Verwandte Themen