Question

J'écris un morceau de code pour & "Faire quelque chose - > Afficher alerte1 - > Faire quelque chose - > Afficher alerte2 &";.


    //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];

Et soudainement une chose étrange est arrivée à plusieurs alertes: il montre & "Alerte 1 &" - > & "Alerte 2 &"; (Appuyez sur 'OK' ) - > & "; alerte 1 &" ;. Pourquoi & Quot; Alerte 1 & Quot; montre encore? Je n'ai pas encore écrit de méthode déléguée. Peut-être un bug? (Merci à cobbal, alert1 est toujours là quand alert2 apparaît.)

Je trouve - (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex fonctionne bien. La méthode déléguée est-elle un moyen courant d’afficher plusieurs alertViews?

Était-ce utile?

La solution

Je suppose que l'alerte 1 est affichée puis couverte par l'alerte 2, car l'exposition n'est pas modale. Lorsque l'alerte 2 est fermée, l'alerte 1 est toujours ouverte.

À votre deuxième question, alertView:didDismissWithButtonIndex: peut mieux fonctionner, mais je ne l'ai pas encore testé.

Autres conseils

Le délégué veille à ce que vous puissiez être averti du rejet de l'alerte et du bouton utilisé pour la rejeter. Cela n'a aucune incidence sur le fait que l'alerte soit rejetée ou non.

L’alerte restera visible jusqu’à ce qu’elle soit rejetée, soit en appuyant sur un bouton (le cas échéant, ils ne sont pas obligatoires), soit en appelant [UIAlertView dismissWithClickedButtonIndex:animated] ou la méthode (non documentée) dismiss de l’instance d’alerte.

Cela ressemble (comme le suggérait Cobbal), l'alerte 2 apparaît au-dessus de l'alerte 1, vous rejetez l'alerte 2 et l'alerte 1 y reste (jusqu'à ce qu'elle soit elle-même rejetée).

Y a-t-il une raison particulière pour laquelle vous souhaitez afficher une nouvelle alerte pendant qu'une autre alerte est toujours affichée? Peut-être qu'un peu plus de contexte nous aiderait à aller au fond des choses, ce qui, je suppose, pourrait être un problème de conception.

[modifier] revenant à ceci et relisant, je me demande si ce que vous demandez avec la méthode déléguée est de savoir si vous devriez afficher l'alerte 2 à partir de là? Dans ce cas, c'est probablement ce que vous voulez, que ce soit directement ou indirectement. Par indirectement, je veux dire que vous pouvez avoir un autre état défini ailleurs qui détermine si l'alerte 2 doit être affichée (ou les circonstances qui y ont conduit). Cet état (un indicateur, par exemple) peut être défini lorsque vous affichez la première alerte et effacé lorsque l'alerte est rejetée (à partir de la méthode delegate).

Cela s’explique par le fait qu’UIAlertView ne bloque pas tant qu’il est affiché. Tout code écrit après l'affichage d'une alerte sera exécuté immédiatement après l'affichage de l'alerte.

Ce que vous devriez avoir, ce sont deux méthodes différentes. Une qui fait quelque chose et ensuite une alerte, et une autre qui fait quelque chose et une autre alerte.

Lancez la première méthode pour faire quelque chose et afficher une alerte, puis connectez-vous à la méthode déléguée de l'alerte et, lorsque vous recevez le rappel de la vue d'alerte, exécutez l'autre méthode.

De cette façon, la deuxième partie du processus ne se produira que lorsque l'utilisateur aura appuyé sur la touche OK de l'alerte dans la première partie du processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top