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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top