Práce s tvOS výstrahami v Xamarin

Tento článek popisuje práci s UIAlertController k zobrazení zprávy upozornění uživateli v Xamarin. tvOS.

Pokud potřebujete mít pozornost tvOS uživateli nebo požádat o oprávnění k provedení destruktivní akce (například odstranění souboru), můžete zobrazit zprávu s upozorněním pomocí UIAlertViewController :

Příklad UIAlertViewController

Pokud se zobrazí zpráva, můžete přidat tlačítka a textová pole do výstrahy, aby uživatel mohl reagovat na akce a poskytnout zpětnou vazbu.

O výstrahách

Jak je uvedeno výše, výstrahy se používají k získání pozornosti uživatele a informování o stavu vaší aplikace nebo žádosti o zpětnou vazbu. Výstrahy musí obsahovat název, můžou mít volitelně zprávu a jedno nebo více tlačítek nebo textových polí.

Příklad výstrahy

Apple má následující návrhy na práci s výstrahami:

  • Výstrahy používejte bez upozornění – výstrahy narušují tok uživatele s aplikací a přeruší činnost koncového uživatele a jako takový by se měla používat jenom pro důležité situace, jako je oznámení o chybách, In-App nákupů a destruktivních akcí.
  • Poskytuje užitečné volby – Pokud výstraha prezentuje možnosti pro uživatele, měli byste zajistit, aby každá z možností poskytovala důležité informace a poskytovala užitečné akce, které uživatel může provést.

Názvy a zprávy výstrah

Apple má následující návrhy na zobrazování nadpisu a volitelné zprávy o výstraze:

  • Použití nadpisů ve více slovnících – nadpis výstrahy by měl získat místo v celém místě, a přitom stále zůstat jednoduchý. Jeden název slova zřídka poskytuje dostatek informací.
  • Používejte popisné nadpisy, které nevyžadují zprávu , pokud je to možné, zvažte, že je nadpis výstrahy dostatečně popisný, protože není vyžadován Nepovinný text zprávy.
  • Udělejte krátkou, úplnou větu – Pokud je volitelná zpráva nutná k získání bodu výstrahy napříč, udržujte je co nejjednodušší a udělejte ucelenou větu se správnými velkými písmeny a interpunkční znaménkem.

Tlačítka výstrah

Apple má následující návrhy na přidání tlačítek do výstrahy:

  • Omezit na dvě tlačítka – kdykoliv je to možné, omezte upozornění na maximum dvou tlačítek. Výstrahy jednoho tlačítka poskytují informace, ale žádné akce. Dvě výstrahy tlačítek poskytují jednoduchou akci ano/bez výběru.
  • Používejte stručné, logické nadpisy tlačítek – jednoduché nadpisy tlačítek slov, které jasně popisují nejlepší pracovní akci tlačítka. Další informace najdete v dokumentaci k práci s tlačítky .
  • Jasně označit destruktivní tlačítka – pro tlačítka, která provádějí destruktivní akci (například odstranění souboru), jasně označují styl.

Zobrazení výstrahy

Chcete-li zobrazit výstrahu, vytvořte instanci UIAlertViewController a nakonfigurujte ji přidáním akcí (tlačítek) a výběrem stylu výstrahy. Například následující kód zobrazí výstrahu OK/Zrušit:

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);

Pojďme se podrobněji podívat na tento kód. Nejprve vytvoříme nové upozornění s daným názvem a zprávou:

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

V dalším kroku pro každé tlačítko, které chceme zobrazit ve výstraze, vytvoříme akci definující název tlačítka, jeho styl a akci, kterou chceme provést, pokud se stiskne tlačítko:

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

UIAlertActionStyleVýčet umožňuje nastavit styl tlačítka jako jednu z následujících možností:

  • Výchozí – tlačítko bude při zobrazení výstrahy výchozím tlačítkem vybrané.
  • Cancel (zrušit ) – tlačítko pro výstrahu je tlačítko Storno.
  • Destruktivní – zvýrazní tlačítko jako destruktivní akci, například odstranění souboru. V současné době tvOS vykreslí destruktivní tlačítko s červeným pozadím.

AddActionMetoda přidá danou akci do UIAlertViewController a nakonec PresentViewController (alertController, true, null) Metoda zobrazí danou výstrahu uživateli.

Přidávání textových polí

Kromě přidání akcí (tlačítek) k výstraze můžete do výstrahy přidat textová pole, která uživateli umožní vyplnit informace, jako jsou uživatelská jména a hesla:

Textové pole v upozornění

Pokud uživatel vybere textové pole, zobrazí se standardní klávesnice tvOS, která umožňuje zadat hodnotu pro pole:

Zadávání textu

Následující kód zobrazí výstrahu OK/zrušit s jedním textovým polem pro zadání hodnoty:

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);

AddTextFieldMetoda přidá do výstrahy nové textové pole, které můžete konfigurovat nastavením vlastností, jako je například zástupný text (text zobrazený v případě, že je pole prázdné), výchozí textovou hodnotu a typ klávesnice. Například:

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

Abychom mohli později pracovat s hodnotou pole text, ukládáme také kopii pomocí následujícího kódu:

UITextField field = null;
...

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

Poté, co uživatel zadá hodnotu do pole text, můžeme použít field proměnnou pro přístup k této hodnotě.

Pomocná třída kontroleru zobrazení výstrah

Vzhledem k tomu, že zobrazení jednoduchých, běžných typů výstrah pomocí UIAlertViewController může mít za následek poměrně bitovou kopii duplicitního kódu, můžete použít pomocnou třídu k omezení množství opakovaného kódu. Například:

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
    }
}

Pomocí této třídy můžete zobrazovat jednoduché výstrahy a reagovat na ně následujícím způsobem:

#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

Souhrn

Tento článek pojednává o práci s nástrojem UIAlertController k zobrazení zprávy upozornění uživateli v Xamarin. tvOS. Nejprve ukázala, jak zobrazit jednoduchou výstrahu a přidat tlačítka. V dalším kroku jsme ukázali, jak přidat textová pole do výstrahy. Nakonec ukázal, jak používat pomocnou třídu k omezení množství opakovaného kódu potřebného k zobrazení výstrahy.