Partager via


Utilisation des alertes tvOS dans Xamarin

Cet article traite de l’utilisation de UIAlertController pour afficher un message d’alerte à l’utilisateur dans Xamarin.tvOS.

Si vous devez attirer l’attention de l’utilisateur tvOS ou demander l’autorisation d’effectuer une action destructrice (par exemple, la suppression d’un fichier), vous pouvez présenter un message d’alerte à l’aide des UIAlertViewControlleréléments suivants :

Exemple UIAlertViewController

Si vous ajoutez un message, vous pouvez ajouter des boutons et des champs de texte à une alerte pour permettre à l’utilisateur de répondre aux actions et de fournir des commentaires.

À propos des alertes

Comme indiqué ci-dessus, les alertes sont utilisées pour attirer l’attention de l’utilisateur et les informer de l’état de votre application ou demander des commentaires. Les alertes doivent présenter un titre, elles peuvent éventuellement avoir un message et un ou plusieurs boutons ou champs de texte.

Exemple d’alerte

Apple propose les suggestions suivantes pour utiliser les alertes :

  • Utilisez les alertes avec modération : les alertes interrompent le flux de l’utilisateur avec l’application et interrompent l’expérience utilisateur et, par conséquent, ne doivent être utilisées que pour des situations importantes telles que les notifications d’erreurs, les achats dans l’application et les actions destructrices.
  • Fournit des choix utiles : si l’alerte présente des options à l’utilisateur, vous devez vous assurer que chaque option offre des informations critiques et fournit des actions utiles à l’utilisateur à entreprendre.

Titres et messages d’alerte

Apple propose les suggestions suivantes pour présenter le titre d’une alerte et le message facultatif :

  • Utilisez des titres à mots multiples : le titre d’une alerte doit obtenir le point de la situation clairement tout en restant simple. Un titre de mot unique fournit rarement suffisamment d’informations.
  • Utilisez des titres descriptifs qui ne nécessitent pas de message : dans la mesure du possible, envisagez de rendre le titre de l’alerte suffisamment descriptif que le texte facultatif du message n’est pas obligatoire.
  • Faites du message une phrase courte et complète : si le message facultatif est requis pour obtenir le point de l’alerte, conservez-le aussi simple que possible et faites-le une phrase complète avec une mise en majuscule et une ponctuation appropriées.

Boutons d’alerte

Apple propose la suggestion suivante pour ajouter des boutons à une alerte :

  • Limite à deux boutons : dans la mesure du possible, limitez l’alerte à un maximum de deux boutons. Les alertes à bouton unique fournissent des informations, mais aucune action. Deux alertes de bouton fournissent un simple choix d’action oui/non.
  • Utilisez des titres succincts, des boutons logiques : simple d’un à deux titres de bouton qui décrivent clairement le mieux l’action du bouton. Pour plus d’informations, consultez notre documentation Working with Buttons .
  • Marquer clairement les boutons destructeurs : pour les boutons qui effectuent une action destructrice (par exemple, la suppression d’un fichier) les marquent clairement avec le UIAlertActionStyle.Destructive style.

Affichage d’une alerte

Pour afficher une alerte, vous créez une instance de l’instance UIAlertViewController et la configurez en ajoutant des actions (boutons) et en sélectionnant le style de l’alerte. Par exemple, le code suivant affiche une alerte OK/Cancel :

const string title = "A Short Title is Best";
const string message = "A message should be a short, complete sentence.";
const string acceptButtonTitle = "OK";
const string cancelButtonTitle = "Cancel";
const string deleteButtonTitle = "Delete";
...

var alertController = UIAlertController.Create (title, message, UIAlertControllerStyle.Alert);

// Create the action.
var acceptAction = UIAlertAction.Create (acceptButtonTitle, UIAlertActionStyle.Default, _ =>
    Console.WriteLine ("The \"OK/Cancel\" alert's other action occurred.")
);

var cancelAction = UIAlertAction.Create (cancelButtonTitle, UIAlertActionStyle.Cancel, _ =>
    Console.WriteLine ("The \"OK/Cancel\" alert's other action occurred.")
);

// Add the actions.
alertController.AddAction (acceptAction);
alertController.AddAction (cancelAction);
PresentViewController (alertController, true, null);

Examinons ce code en détail. Tout d’abord, nous créons une alerte avec le titre et le message donnés :

UIAlertController.Create (title, message, UIAlertControllerStyle.Alert)

Ensuite, pour chaque bouton que nous voulons afficher dans l’alerte, nous créons une action définissant le titre du bouton, son style et l’action à entreprendre si le bouton est appuyé :

UIAlertAction.Create ("Button Title", UIAlertActionStyle.Default, _ =>
    // Do something when the button is pressed
    ...
);

L’énumération UIAlertActionStyle vous permet de définir le style du bouton comme l’un des éléments suivants :

  • Valeur par défaut : le bouton sera le bouton par défaut sélectionné lorsque l’alerte s’affiche.
  • Annuler : le bouton Annuler est le bouton Annuler pour l’alerte.
  • Destructeur : met en surbrillance le bouton comme une action destructrice, telle que la suppression d’un fichier. Actuellement, tvOS affiche le bouton Destructeur avec un arrière-plan rouge.

La AddAction méthode ajoute l’action donnée à l’utilisateur UIAlertViewController et affiche enfin PresentViewController (alertController, true, null) l’alerte donnée à l’utilisateur.

Ajout de champs de texte

Outre l’ajout d’actions (boutons) à l’alerte, vous pouvez ajouter des champs de texte à l’alerte pour permettre à l’utilisateur de renseigner des informations telles que des ID d’utilisateur et des mots de passe :

Champ de texte dans une alerte

Si l’utilisateur sélectionne le champ de texte, le clavier tvOS standard s’affiche pour lui permettre d’entrer une valeur pour le champ :

Entrée de texte

Le code suivant affiche une alerte OK/Cancel avec un seul champ de texte pour entrer une valeur :

UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
UITextField field = null;

// Add and configure text field
alert.AddTextField ((textField) => {
    // Save the field
    field = textField;

    // Initialize field
    field.Placeholder = placeholder;
    field.Text = text;
    field.AutocorrectionType = UITextAutocorrectionType.No;
    field.KeyboardType = UIKeyboardType.Default;
    field.ReturnKeyType = UIReturnKeyType.Done;
    field.ClearButtonMode = UITextFieldViewMode.WhileEditing;

});

// Add cancel button
alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
    // User canceled, do something
    ...
}));

// Add ok button
alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(actionOK) => {
    // User selected ok, do something
    ...
}));

// Display the alert
controller.PresentViewController(alert,true,null);

La AddTextField méthode ajoute un nouveau champ de texte à l’alerte que vous pouvez ensuite configurer en définissant des propriétés telles que le texte d’espace réservé (le texte qui apparaît lorsque le champ est vide), la valeur de texte par défaut et le type de clavier. Par exemple :

// Initialize field
field.Placeholder = placeholder;
field.Text = text;
field.AutocorrectionType = UITextAutocorrectionType.No;
field.KeyboardType = UIKeyboardType.Default;
field.ReturnKeyType = UIReturnKeyType.Done;
field.ClearButtonMode = UITextFieldViewMode.WhileEditing;

Pour que nous puissions agir ultérieurement sur la valeur du champ de texte, nous enregistrez également une copie de l’utilisation du code suivant :

UITextField field = null;
...

// Add and configure text field
alert.AddTextField ((textField) => {
    // Save the field
    field = textField;
    ...
});

Une fois que l’utilisateur a entré une valeur dans le champ texte, nous pouvons utiliser la field variable pour accéder à cette valeur.

Classe d’assistance du contrôleur d’affichage des alertes

Étant donné que l’affichage de types simples et courants d’alertes peut UIAlertViewController entraîner un peu de code en double, vous pouvez utiliser une classe d’assistance pour réduire la quantité de code répétitif. Par exemple :

using System;
using Foundation;
using UIKit;
using System.CodeDom.Compiler;

namespace UIKit
{
    /// <summary>
    /// Alert view controller is a reusable helper class that makes working with <c>UIAlertViewController</c> alerts
    /// easier in a tvOS app.
    /// </summary>
    public class AlertViewController
    {
        #region Static Methods
        public static UIAlertController PresentOKAlert(string title, string description, UIViewController controller) {
            // No, inform the user that they must create a home first
            UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);

            // Configure the alert
            alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(action) => {}));

            // Display the alert
            controller.PresentViewController(alert,true,null);

            // Return created controller
            return alert;
        }

        public static UIAlertController PresentOKCancelAlert(string title, string description, UIViewController controller, AlertOKCancelDelegate action) {
            // No, inform the user that they must create a home first
            UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);

            // Add cancel button
            alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
                // Any action?
                if (action!=null) {
                    action(false);
                }
            }));

            // Add ok button
            alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(actionOK) => {
                // Any action?
                if (action!=null) {
                    action(true);
                }
            }));

            // Display the alert
            controller.PresentViewController(alert,true,null);

            // Return created controller
            return alert;
        }

        public static UIAlertController PresentDestructiveAlert(string title, string description, string destructiveAction, UIViewController controller, AlertOKCancelDelegate action) {
            // No, inform the user that they must create a home first
            UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);

            // Add cancel button
            alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
                // Any action?
                if (action!=null) {
                    action(false);
                }
            }));

            // Add ok button
            alert.AddAction(UIAlertAction.Create(destructiveAction,UIAlertActionStyle.Destructive,(actionOK) => {
                // Any action?
                if (action!=null) {
                    action(true);
                }
            }));

            // Display the alert
            controller.PresentViewController(alert,true,null);

            // Return created controller
            return alert;
        }

        public static UIAlertController PresentTextInputAlert(string title, string description, string placeholder, string text, UIViewController controller, AlertTextInputDelegate action) {
            // No, inform the user that they must create a home first
            UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
            UITextField field = null;

            // Add and configure text field
            alert.AddTextField ((textField) => {
                // Save the field
                field = textField;

                // Initialize field
                field.Placeholder = placeholder;
                field.Text = text;
                field.AutocorrectionType = UITextAutocorrectionType.No;
                field.KeyboardType = UIKeyboardType.Default;
                field.ReturnKeyType = UIReturnKeyType.Done;
                field.ClearButtonMode = UITextFieldViewMode.WhileEditing;

            });

            // Add cancel button
            alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
                // Any action?
                if (action!=null) {
                    action(false,"");
                }
            }));

            // Add ok button
            alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(actionOK) => {
                // Any action?
                if (action!=null && field !=null) {
                    action(true, field.Text);
                }
            }));

            // Display the alert
            controller.PresentViewController(alert,true,null);

            // Return created controller
            return alert;
        }
        #endregion

        #region Delegates
        public delegate void AlertOKCancelDelegate(bool OK);
        public delegate void AlertTextInputDelegate(bool OK, string text);
        #endregion
    }
}

À l’aide de cette classe, l’affichage et la réponse aux alertes simples peuvent être effectués comme suit :

#region Custom Actions
partial void DisplayDestructiveAlert (Foundation.NSObject sender) {
    // User helper class to present alert
    AlertViewController.PresentDestructiveAlert("A Short Title is Best","The message should be a short, complete sentence.","Delete",this, (ok) => {
        Console.WriteLine("Destructive Alert: The user selected {0}",ok);
    });
}

partial void DisplayOkCancelAlert (Foundation.NSObject sender) {
    // User helper class to present alert
    AlertViewController.PresentOKCancelAlert("A Short Title is Best","The message should be a short, complete sentence.",this, (ok) => {
        Console.WriteLine("OK/Cancel Alert: The user selected {0}",ok);
    });
}

partial void DisplaySimpleAlert (Foundation.NSObject sender) {
    // User helper class to present alert
    AlertViewController.PresentOKAlert("A Short Title is Best","The message should be a short, complete sentence.",this);
}

partial void DisplayTextInputAlert (Foundation.NSObject sender) {
    // User helper class to present alert
    AlertViewController.PresentTextInputAlert("A Short Title is Best","The message should be a short, complete sentence.","placeholder", "", this, (ok, text) => {
        Console.WriteLine("Text Input Alert: The user selected {0} and entered `{1}`",ok,text);
    });
}
#endregion

Résumé

Cet article a abordé l’utilisation UIAlertController d’un message d’alerte pour l’utilisateur dans Xamarin.tvOS. Tout d’abord, il a montré comment afficher une alerte simple et ajouter des boutons. Ensuite, il a montré comment ajouter des champs de texte à une alerte. Enfin, il a montré comment utiliser une classe d’assistance pour réduire la quantité de code répétitif nécessaire pour afficher une alerte.