Il metodo delegato “clickedButtonAtIndex:” non si chiama
-
22-09-2019 - |
Domanda
Ho creato una vista avviso con due pulsanti utilizzando il seguente codice:
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 fare ciò, 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
Soluzione
delegate:nil
come sarà la visualizzazione degli avvisi associare un delegato se è stato specificato che non ci saranno delegati? Sostituire questa parte con
delegate:self
, invece.
Altri suggerimenti
Prova a impostare il delegato per sé invece pari a zero.
mi stava chiamando di UIAlertView dismissWithClickedButtonIndex: 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;
}
Questo metodo modo alertView: clickedButtonAtIndex: non viene mai chiamato anche se si imposta la corretta delegato. Invece alertView: didDismissWithButtonIndex: venga 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.
in .h mettere 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
La risposta corretta per questa domanda è delegate:nil
. Ma nel caso che il delegato è già impostato per sé, e il clickedButtonAtIndex
ancora non funziona, prova a verificare se si stanno spuntando un altro controller della vista ([self.navigationController popViewControllerAnimated:YES];
) dopo aver mostrato l'alertview. Ciò può anche portare a non clickedButtonAtIndex
essere chiamato. Questo è ciò che è successo a me.
Spero che questo aiuta qualcuno.