3 votes

MonoTouch - réutilisation UIAlertVIew ?

Les instances de UIAlertView doivent-elles être réutilisées lorsque cela est possible ?

Ou est-ce que les envelopper dans un bloc d'utilisation est la meilleure pratique ?

  • Pour une situation, j'ai créé un (non-modale) de MessageBox (tout comme comme WinForms ou WPF). Je l'utilise principalement principalement pour des raisons de commodité.
  • Une autre situation est celle d'un UIAlertView personnalisée que j'ai sous-classée qui a une mise en page plus avancée. J'ai câblé l'événement Dismissed pour effectuer un travail sur la fermeture.

L'une ou l'autre de ces situations nécessiterait-elle une approche différente ?

2voto

Je ne pense pas qu'il y ait un problème à faire cela dans un bloc using - vous pouvez vouloir abstraire le gestionnaire de sorte que vous n'ayez pas de délégués de boîte d'alerte partout qui font la même chose.

Mais le LoadingHUDView est un bon exemple de la nécessité de coder la fonctionnalité pour des choses plus avancées...

mais d'une manière ou d'une autre, si vous réutilisez le même objet mais que vous le modifiez vraiment à chaque fois, il n'y a pas grand-chose à gagner.

2voto

miguel.de.icaza Points 27138

Voici comment vous pouvez rendre votre UIAlertView modal :

Pour ce faire, ce que vous pouvez faire est d'exécuter la boucle principale manuellement. Je n'ai pas réussi à arrêter la mainloop directement, donc à la place je lance la mainloop pendant 0,5 secondes et j'attends que l'utilisateur réponde.

La fonction suivante montre comment vous pourriez mettre en œuvre une requête modale avec l'approche ci-dessus :

int WaitForClick ()
{
    int clicked = -1;
    var x = new UIAlertView ("Title", "Message",  null, "Cancel", "OK", "Perhaps");
    x.Show ();
    bool done = false;
    x.Clicked += (sender, buttonArgs) => {
        Console.WriteLine ("User clicked on {0}", buttonArgs.ButtonIndex);
    clicked = buttonArgs.ButtonIndex;
    };    
    while (clicked == -1){
        NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow (0.5));
        Console.WriteLine ("Waiting for another 0.5 seconds");
    }

    Console.WriteLine ("The user clicked {0}", clicked);
    return clicked;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X