Pergunta

eu escrever um pedaço de código para "fazer alguma coisa-> mostrar alert1-> do algo-> Mostrar alert2".


    //do something
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"Alert 1" 
                          message:nil 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    //do something  
    UIAlertView *alert2 = [[UIAlertView alloc] 
                           initWithTitle:@"Alert 2" 
                           message:nil 
                           delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil];
    [alert2 show];
    [alert2 release];

E de repente aconteceu uma coisa estranha para vários AlertViews: Mostra "Alerta 1" -> "Alerta 2" (Pressione 'OK') -> "Alerta 1". Por mostra "Alerta 1" de novo? Não tenho escrito qualquer método delegado ainda. Talvez um bug? (Graças a cobbal, alert1 ainda está lá quando alert2 aparece.)

Eu acho - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funciona bem. É o método delegado uma forma comum de mostrar várias alertViews?

Foi útil?

Solução

Eu diria que alerta 1 é mostrado e, em seguida, coberto por alerta 2 desde show não é modal. Quando em alerta 2 está fechada, alerta 1 ainda está aberta.

Para sua segunda pergunta, alertView:didDismissWithButtonIndex: pode funcionar melhor, mas eu realmente não tenho testado isso.

Outras dicas

O delegado é para que você possa ser notificado quando o alerta é rejeitado, e qual botão foi usado para descartá-lo. Ele não afeta se o alerta é rejeitado em tudo.

O alerta permanecerá visível até que ele é rejeitado tanto por você tocar num botão. (Se houver - eles não são obrigados) ou você chamar qualquer [UIAlertView dismissWithClickedButtonIndex:animated] ou o (indocumentados) Método dismiss da instância de alerta

Parece que (como Cobbal sugerido), alerta 2 está aparecendo ao longo de alerta 1, você descartar alerta 2, e alerta 1 permanece lá (até que em si é rejeitado).

Existe uma razão particular que pretende mostrar um novo alerta, enquanto outro ainda está mostrando? Talvez mais algum contexto nos ajudaria a chegar à raiz do problema, que eu suspeito que pode ser um problema de design.

[editar] voltar a este e ler de novo, eu me pergunto se o que você está perguntando sobre o método delegado é se você deve estar mostrando alerta 2 a partir daí? No caso em que isso é provavelmente o que você quer - seja direta ou indiretamente. Por indiretamente quero dizer que você pode ter algum outro lugar do estado conjunto que determina se alerta 2 deve ser apresentada (ou as circunstâncias que levam a ele). Esse estado (a bandeira, talvez) poderia ser definida quando você mostra o primeiro alerta, e apagado quando o alerta é rejeitado (a partir do método delegado).

A razão isso acontece é porque UIAlertView não bloqueia enquanto ele está mostrando. Qualquer código escrito depois de mostrar um alertview vai correr em linha reta após o alerta é mostrado.

O que você deve ter é dois métodos diferentes. Um que faz alguma coisa e, em seguida, mostra um alerta, e depois outro que faz algo e mostra outro alerta.

lançar o primeiro método para fazer alguma coisa e mostrar um alerta, em seguida, ligar para método delegado do alerta, e quando você começa a chamada de retorno do alertview, execute o outro método.

Desta forma, a segunda parte do processo não vai acontecer até que o usuário tenha pressionado OK no alerta na primeira parte do processo.

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