- (void) alertViewCancel: (UIAlertView *) alertView non viene chiamato
-
20-09-2019 - |
Domanda
Ho il problema che il metodo UIAlertViewDelegate - (void) alertViewCancel:. (UIAlertView *) alertView non è chiamato quando posso cancellare un AlertView con il suo pulsante di annullamento
Strano è che il metodo delegato - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funziona perfettamente
.Qualcuno ha un'idea?
Grazie in anticipo
Sean
- (void)alertViewCancel:(UIAlertView *)alertView
{
if(![self aBooleanMethod])
{
exit(0);
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//some code
}
Io chiamo questo quando un pulsante viene cliccato:
- (void)ImagePickDone
{
UIAlertView *alertDone = [[UIAlertView alloc]
initWithTitle:@"Done"
message:@"Are u sure?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles: @"Yes", nil];
[alertDone show];
[alertDone release];
}
Soluzione
L'alertViewCancel viene utilizzato quando il sistema respinge la visualizzazione avviso, non quando l'utente preme il pulsante "Annulla". Citazione di mela docs :
In alternativa, è possibile implementare la alertViewCancel: metodo per prendere la azione appropriata quando il sistema annulla la visualizzazione di allarme. Se la delegato non implementa questa Metodo, il comportamento predefinito è simulare l'utente fa clic sul annullare pulsante e chiudendo la vista.
Se si desidera catturare quando l'utente preme il pulsante "Annulla" si dovrebbe utilizzare il metodo clickedButtonAtIndex e verificare che l'indice corrisponde all'indice per il pulsante Annulla. Per ottenere questo uso index:
index = alertDone.cancelButtonIndex;
Altri suggerimenti
È possibile gestire l'Annulla l'indice 0 di questo delegato:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0){
//cancel button clicked. Do something here.
}
else{
//other button indexes clicked
}
}
Questo può essere migliorato in due modi. In primo luogo, gestisce solo il caso che l'utente in realtà fa clic su un pulsante. Essa non gestisce la situazione che [MyAlert dismissWithClickedButtonIndex:] si chiama, o che l'allarme è respinto in qualche altro modo. In secondo luogo, il tasto 0 non è necessariamente il pulsante di annullamento. In un avviso con due pulsanti, quello di sinistra è in corrispondenza dell'indice 0, e quello di destra è al indice 1. Se è stato modificato i titoli in modo che il tasto destro dice "Annulla", poi il tasto 1 è logicamente il pulsante Annulla. Invece di "willDismiss" è possibile attuare "didDismiss" che sarà chiamato dopo che la finestra di dialogo è scomparso e non prima.
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == alertView.cancelButtonIndex)
{
//cancel button clicked. Do something here.
}
else
{
//other button indexes clicked
}
}