2010-03-29 16 views
6

ho creato una vista avviso con due pulsanti utilizzando il seguente codice:Il metodo "clickedButtonAtIndex:" delegato non si chiama

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

voglio eseguire del codice quando uno dei pulsanti viene cliccato. Per farlo, ho aggiunto il seguente metodo al file delegate.m:

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

Ma questo metodo non viene chiamato quando si preme uno dei pulsanti! Qualcuno può dirmi perché?

Grazie in anticipo,

Sagiftw

risposta

39
delegate:nil 

in che modo la vista di avviso associa un delegato se è stato specificato che non ci saranno delegati? Sostituire la parte con

delegate:self 

.

+0

Grazie per l'aiuto! Ho dimenticato che!!! =) – Sagiftw

+0

Grazie anche a me è stato dimenticato. – iBapu

3

provare a impostare il delegato per sé, invece di zero.

0

in .h messo UIActionSheetDelegate e in .m durante la creazione di un alertView mettere il delegato per sé non pari a zero, come viene fatto nel caso precedente

2

mi stava chiamando dismissWithClickedButtonIndex di UIAlertView: animato: metodo dal metodo delegato UITextField perché volevo gestire il tasto Invio della tastiera così:

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

in questo modo il metodo alertView: clickedButtonAtIndex: non viene mai chiamato anche se si imposta la corretta delegato. Invece alertView: didDismissWithButtonIndex: viene chiamato. Quindi implementare questo metodo, invece:

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

Se si desidera solo per gestire i pulsanti di allarme di vista unico, quelli prima clickedButtonAtIndex chiamata e poi didDismissWithButtonIndex.

0

La risposta corretta per questa domanda è delegate:nil. Ma nel caso in cui il delegato sia già impostato su se stesso e il clickedButtonAtIndex non funzioni ancora, prova a verificare se stai facendo scattare un altro controller di visualizzazione ([self.navigationController popViewControllerAnimated:YES];) dopo aver mostrato la visualizzazione degli avvisi. Questo può anche comportare il mancato ricevimento di clickedButtonAtIndex. Questo è quello che mi è successo.

Spero che questo aiuti qualcuno.

Problemi correlati