- (void) alertviewCancel: (uialertview *) alertview não é chamado
-
20-09-2019 - |
Pergunta
Eu tenho o problema de que o método uialertviewDelegate - (void) alertviewCancel: (uialertview *) alertview não é chamado quando cancelará um alerta com o botão Cancelar.
Estranho é que o método delegado - (void) alertview: (uialertview *) alertview clickedbuttonatindex: (NSInteger) ButtonIndex funciona perfeitamente.
Alguém tem alguma ideia?
desde já, obrigado
Sean
- (void)alertViewCancel:(UIAlertView *)alertView
{
if(![self aBooleanMethod])
{
exit(0);
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//some code
}
Eu chamo isso quando um botão é clicado:
- (void)ImagePickDone
{
UIAlertView *alertDone = [[UIAlertView alloc]
initWithTitle:@"Done"
message:@"Are u sure?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles: @"Yes", nil];
[alertDone show];
[alertDone release];
}
Solução
O alertViewCancel é usado para quando o sistema descarta sua visualização de alerta, não quando o usuário pressiona o botão "Cancelar". Citação do Apple Docs:
Opcionalmente, você pode implementar o método alertviewCancel: para tomar a ação apropriada quando o sistema cancelar sua exibição de alerta. Se o delegado não implementar esse método, o comportamento padrão será simular o usuário clicando no botão Cancelar e fechar a exibição.
Se você deseja capturar quando o usuário pressionar o botão "Cancelar", use o método ClickEdButtonAtIndex e verifique se o índice corresponde ao índice para o botão Cancelar. Para obter esse uso do índice:
index = alertDone.cancelButtonIndex;
Outras dicas
Você pode lidar com o cancelamento no índice 0 deste delegado:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0){
//cancel button clicked. Do something here.
}
else{
//other button indexes clicked
}
}
Isso pode ser melhorado de duas maneiras. Primeiro, ele apenas lida com o caso que o usuário realmente clicou em um botão. Ele não lida com a situação que [Myalert demitiu -se clickedbuttonIndex:] é chamado, ou que o alerta é demitido de alguma outra maneira. Segundo, o botão 0 não é necessariamente o botão Cancelar. Em um alerta com dois botões, o esquerdo está no índice 0 e o direito está no índice 1. Se você alterou os títulos para que o botão direito diga "Cancelar", o botão 1 é logicamente o botão cancelar. Em vez de "Willdismiss", você pode implementar "Diddismiss", que será chamado após o desaparecimento da caixa de diálogo e não antes.
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == alertView.cancelButtonIndex)
{
//cancel button clicked. Do something here.
}
else
{
//other button indexes clicked
}
}