Pergunta

Atualmente eu tenho uma aula aparecendo UIAlertViewestá aqui e ali. Atualmente, a mesma classe é o delegado para estes (é muito lógico que seria). Infelizmente, estes UIAlertViewS chamará os mesmos métodos de delegados da classe. Agora, a pergunta é - como você sabe de qual alerta ver um método de delegado é invocado? Eu estava pensando em apenas verificar o título da visão de alerta, mas isso não é tão elegante. Qual é a maneira mais elegante de lidar com vários UIAlertViews?

Foi útil?

Solução

Marque o UIAlertViewé assim:

#define kAlertViewOne 1
#define kAlertViewTwo 2

UIAlertView *alertView1 = [[UIAlertView alloc] init...
alertView1.tag = kAlertViewOne;

UIAlertView *alertView2 = [[UIAlertView alloc] init...
alertView2.tag = kAlertViewTwo;

e depois diferencie entre eles nos métodos delegados usando estas tags:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == kAlertViewOne) {
        // ...
    } else if(alertView.tag == kAlertViewTwo) {
        // ...
    }
}

Outras dicas

Para sua informação, se você deseja segmentar apenas usuários do iOS 4 (o que é razoável agora que ~ 98,5% dos clientes têm pelo menos o iOS 4 instalado), você deve poder usar blocos para fazer um manuseio embutido muito bom do UIALERTVIELS.

Aqui está uma pergunta de Stackoverflow explicando:
Bloco para uialertviewDelegate

Tentei usar a estrutura de Blockskit de Zachary Waldowski para isso. Dele API UIALERTVIEW (BlocksKit) A referência parecia muito boa. No entanto, tentei seguir Suas instruções para importar a estrutura do Blockskit No meu projeto, mas infelizmente não consegui fazer funcionar.

Então, como pode Berk Güder sugere, eu usei UIAlertView Tags por enquanto. Mas em algum momento no futuro vou tentar passar para usar blocos (de preferência um que suporta arco fora da caixa)!

mais fácil e mais recente

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 1;

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 2;



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == 1) {
        // first alert...
    } else  {
        // sec alert...
    }
}

tudo feito!

Você pode superar toda essa provação e impedir que você use tags, aprimorando o UialerTView para usar retornos de chamada de bloco. Verificação de saída esta postagem do blog Eu escrevi sobre o assunto.

Eu sempre pensei que usar tags é um pouco de hack. Se você os usar, defina pelo menos algumas constantes definidas para os números de tags.

Em vez disso, eu uso propriedades como esta:

Na seção de interface:

@property (nonatomic, weak) UIAlertView *overDueAlertView;
@property (nonatomic, weak) UIAlertView *retryPromptAlertView;

Criando a visão de alerta:

UIAlertView *alert = [[UIAlertView alloc] init...
self.overDueAlertView = alert;
[alert show];

Método delegado:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (alertView == self.overDueAlertView) {
    // Overdue alert
  } else if (alertView == self.retryPromptAlertView) {
    // Retry alert
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top