comment implémenter une boîte de dialogue contextuelle dans iOS


303

Après un calcul, je souhaite afficher une fenêtre contextuelle ou une boîte d'alerte transmettant un message à l'utilisateur. Quelqu'un sait-il où je peux trouver plus d'informations à ce sujet?

Réponses:


517

Oui, UIAlertViewc'est probablement ce que vous cherchez. Voici un exemple:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

Si vous voulez faire quelque chose de plus sophistiqué, par exemple afficher une interface utilisateur personnalisée dans votre UIAlertView, vous pouvez sous UIAlertView- classer et insérer des composants d'interface utilisateur personnalisés dans la initméthode. Si vous souhaitez répondre à une pression de bouton après l' UIAlertViewapparition d' un , vous pouvez définir ce qui delegateprécède et appliquer la - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexméthode.

Vous pouvez également consulter le UIActionSheet.


45
La documentation Apple indique que "la classe UIAlertView est destinée à être utilisée telle quelle et ne prend pas en charge le sous-classement". developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Juste un commentaire: avec ARC activé, la '[alerte release]' n'est pas nécessaire (du moins, le compilateur le dit).
Javier Sedano

4
Le sous-classement UIAlertView n'est pas pris en charge sur iOS 4
xySVerma

1
Voici un exemple d'une simple UIAlertView avec délégué, si vous avez également besoin des actions des boutons
guilherme.minglini

2
Dans le cas où vous recherchez une version rapide, consultez la réponse d' Oscar Swanros
Rogerio Chaves

177

Différentes personnes qui viennent à cette question signifient différentes choses par une boîte contextuelle. Je recommande fortement de lire la documentation des vues temporaires . Ma réponse est en grande partie un résumé de cela et d'autres documents connexes.

Alerte (montrez-moi un exemple)

entrez la description de l'image ici

Les alertes affichent un titre et un message facultatif. L'utilisateur doit l'acquitter (une alerte à un bouton) ou faire un choix simple (une alerte à deux boutons) avant de continuer. Vous créez une alerte avec un UIAlertController.

Il convient de citer l'avertissement et les conseils de la documentation sur la création d'alertes inutiles.

entrez la description de l'image ici

Remarques:

Fiche d'action (montrez-moi un exemple)

entrez la description de l'image ici

Les fiches d'action donnent à l'utilisateur une liste de choix. Ils apparaissent soit en bas de l'écran, soit dans un popover en fonction de la taille et de l'orientation de l'appareil. Comme pour les alertes, a UIAlertControllerest utilisé pour créer une feuille d'action. Avant iOS 8, UIActionSheetétait utilisé, mais maintenant la documentation dit:

Important: UIActionSheet est déconseillé dans iOS 8. (Notez qu'il UIActionSheetDelegateest également déconseillé.) Pour créer et gérer des feuilles d'action dans iOS 8 et versions ultérieures, utilisez plutôt UIAlertControlleravec un preferredStylede UIAlertControllerStyleActionSheet.

Vue modale (montrez-moi un exemple)

entrez la description de l'image ici

Une vue modale est une vue autonome qui possède tout ce dont elle a besoin pour effectuer une tâche. Il peut ou non occuper le plein écran. Pour créer une vue modale, utilisez un UIPresentationControlleravec l'un des styles de présentation modale .

Voir également

Popover (montrez-moi un exemple)

entrez la description de l'image ici

Un Popover est une vue qui apparaît lorsqu'un utilisateur tape sur quelque chose et disparaît en le tapotant. Il a une flèche indiquant le contrôle ou l'emplacement d'où le robinet a été effectué. Le contenu peut être à peu près tout ce que vous pouvez mettre dans un View Controller. Vous faites un popover avec un UIPopoverPresentationController. (Avant iOS 8, UIPopoverControllerétait la méthode recommandée.)

Dans le passé, les popovers n'étaient disponibles que sur l'iPad, mais à partir d'iOS 8, vous pouvez également les obtenir sur un iPhone (voir ici , ici et ici ).

Voir également

Notifications

entrez la description de l'image ici

Les notifications sont des sons / vibrations, des alertes / bannières ou des badges qui informent l'utilisateur de quelque chose même lorsque l'application n'est pas en cours d'exécution au premier plan.

entrez la description de l'image ici

Voir également

Une note sur les toasts Android

entrez la description de l'image ici

Sous Android, un Toast est un court message qui s'affiche à l'écran pendant une courte période, puis disparaît automatiquement sans perturber l'interaction de l'utilisateur avec l'application.

Les personnes venant d'un arrière-plan Android veulent savoir ce qu'est la version iOS d'un Toast. On peut trouver quelques exemples de ces questions ici , ici , ici et ici . La réponse est qu'il n'y a pas d'équivalent à un Toast dans iOS . Diverses solutions de contournement qui ont été présentées comprennent:

  • Créez le vôtre avec une sous-classe UIView
  • Importer un projet tiers qui imite un Toast
  • Utilisez une alerte sans bouton avec une minuterie

Cependant, mon conseil est de s'en tenir aux options d'interface utilisateur standard qui viennent déjà avec iOS. N'essayez pas de donner à votre application une apparence et un comportement identiques à ceux de la version Android. Pensez à la façon de la reconditionner pour qu'elle ressemble à une application iOS.


3
Avec une note sur Android Toast encore! Agréable! Ces informations aident les nouveaux développeurs issus du développement Android. Je vous remercie!
Filipe Brito

3
Mec, j'ai besoin d'imprimer et d'encadrer ça! Tu m'as sauvé hier et aujourd'hui encore: D
finngu

58

Depuis la sortie d'iOS 8, UIAlertViewest désormais obsolète; UIAlertController est le remplaçant.

Voici un exemple de son apparence dans Swift:

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

Comme vous pouvez le voir, l'API nous permet d'implémenter des rappels pour l'action et lorsque nous présentons l'alerte, ce qui est assez pratique!

Mis à jour pour Swift 4.2

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi Est-ce que presentViewController doit avoir une accolade fermante et quelle est la différence entre votre bloc d'achèvement et le simple fait d'avoir terminé: néant?
Andrew Plummer

Cela ne fait aucune différence. S'il existe un bloc pour l'appeler il sera appelé.
Entalpi

25

Mis à jour pour iOS 8.0

Depuis iOS 8.0, vous devrez utiliser UIAlertController comme suit:

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

Où self dans mon exemple est un UIViewController, qui implémente la méthode "presentViewController" pour un popup.

David


11

Pour Swift 3 et Swift 4:

UIAlertView étant obsolète, il existe un bon moyen d'afficher Alert sur Swift 3

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

Obsolète:

Voici la version rapide inspirée de la réponse vérifiée:

Afficher AlertView:

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

Ajoutez le délégué à votre contrôleur de vue:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Lorsque l'utilisateur clique sur le bouton, ce code sera exécuté:

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView est désormais obsolète.
Parth Sane

7

Bien que j'aie déjà écrit un aperçu de différents types de fenêtres contextuelles, la plupart des gens ont juste besoin d'une alerte.

Comment implémenter une boîte de dialogue contextuelle

entrez la description de l'image ici

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

Ma réponse plus complète est ici .


0

Voici la version C # dans Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.