O método delegado “clickedButtonAtIndex:” não é chamado
-
22-09-2019 - |
Pergunta
Criei uma visualização de alerta com dois botões usando o seguinte código:
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];
Quero executar algum código quando um dos botões for clicado.Para fazer isso, adicionei o seguinte método ao arquivo delegado.m:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex==0) //Run some code
else //Other code
}
Mas esse método não é chamado quando pressiono algum dos botões!Alguém pode me dizer o porquê?
Desde já, obrigado,
Sagiftw
Solução
delegate:nil
Como a visão de alerta associará um delegado se você especificar que não haverá delegados? Substitua essa parte por
delegate:self
em vez de.
Outras dicas
Tente definir o delegado como self em vez de nulo.
Eu estava chamando o Uialertview's DispenswithClickedButtonIndex: animado: Método do método Uitextfield Delegate, porque eu queria lidar com a tecla de retorno do teclado também:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField.tag == 1001) {
[textField resignFirstResponder];
[_alert dismissWithClickedButtonIndex:1 animated:YES];
}
return YES;
}
Método dessa maneira alertview: clickedbuttonatindex: Nunca é chamado, mesmo se você configurar o delegado adequado. Em vez de alertview: diddismisswithbuttonindex: é chamado. Portanto, implemente este método: em vez disso:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// your code here
}
Se você deseja apenas lidar com os botões do Alert View, esses primeiros cliques de chamadas cliquesbuttonatindex e depois diddismisswithbuttonIndex.
em .h colocou uiActionSheetDelegate e em.
A resposta correta para esta pergunta é delegate:nil
. Mas caso o delegado já esteja definido para si mesmo, e o clickedButtonAtIndex
ainda não está funcionando, tente verificar se você estiver estourando outro controlador de exibição ([self.navigationController popViewControllerAnimated:YES];
) depois de mostrar o alerta. Isso também pode resultar em clickedButtonAtIndex
não sendo chamado. Isto é o que aconteceu comigo.
Espero que isso ajude alguém.