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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top