Поиск…


Показать оповещение

Для предупреждений с iOS 8 вы должны использовать UIAlertController но для версий раньше вы использовали бы UIAlertView , который теперь устарел.

8,0
var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
    // otherTitle();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));
this.PresentViewController(alert, true, null);
8,0
var alert = new UIAlertView (title, message, null, cancelTitle, otherTitle);
alert.Clicked += (object sender, UIButtonEventArgs e) => {
    if(e.ButtonIndex == 1)
       // otherTitle();
};
alert.Show ();

Отобразить оповещение входа в систему

Следующий код для iOS 8 и ниже для создания оповещения входа.

// Create the UIAlertView
var loginAlertView = new UIAlertView(title, message, null, cancelTitle, okTitle);

// Setting the AlertViewStyle to UIAlertViewStyle.LoginAndPasswordInput
loginAlertView.AlertViewStyle = UIAlertViewStyle.LoginAndPasswordInput;

// Getting the fields Username and Password
var usernameTextField = loginAlertView.GetTextField(0);
var passwordTextField = loginAlertView.GetTextField(1);

// Setting a placeholder
usernameTextField.Placeholder = "[email protected]";
passwordTextField.Placeholder = "Password";

// Adding the button click handler.
loginAlertView.Clicked += (alertViewSender, buttonArguments) =>
{
    
    // Check if cancel button is pressed
    if (buttonArguments.ButtonIndex == loginAlertView.CancelButtonIndex)
    {
        // code
    }
    
    // In our case loginAlertView.FirstOtherButtonIndex is equal to the OK button
    if (buttonArguments.ButtonIndex == loginAlertView.FirstOtherButtonIndex)
    {
        // code
    }
};

// Show the login alert dialog
loginAlertView.Show();

Отображение листа действий

UIAlertController доступный с iOS8, позволяет использовать один и тот же объект предупреждения для листов действий или более классических предупреждений. Единственное различие заключается в том, что UIAlertControllerStyle передается как параметр при создании.

Эта строка изменяется от AlertView к ActionSheet, по сравнению с некоторыми другими примерами, доступными здесь:

var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.ActionSheet);

Способ добавления действий к контроллеру все тот же:

alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
    // ExecuteSomeAction();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));

//Add additional actions if necessary

Обратите внимание, что если у вас есть безпараметрический метод void, вы можете использовать его как последний параметр .AddAction() .

Например, предположим, что я хочу, чтобы код private void DoStuff(){...} выполнялся, когда я private void DoStuff(){...} «OK»:

UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);

Заметьте, что я не использую () после DoStuff при создании действия.

То, как вы представляете контроллер, выполняется так же, как и любой другой контроллер:

this.PresentViewController(alert, true, null);

Диалоговое окно «Модифицировать оповещение»

Общепринятой практикой было использование NSRunLoop для отображения модального UIAlertView для блокировки выполнения кода до тех пор, пока пользовательский ввод не будет обработан в iOS; пока Apple не выпустила iOS7, она сломала несколько существующих приложений. К счастью, есть лучший способ реализовать его с асинхронным / ожиданием C #.

Вот новый код, использующий шаблон async / await для отображения модального UIAlertView:

Task ShowModalAletViewAsync (string title, string message, params string[] buttons)
{
    var alertView = new UIAlertView (title, message, null, null, buttons);
    alertView.Show ();
    var tsc = new TaskCompletionSource ();

    alertView.Clicked += (sender, buttonArgs) => {
        Console.WriteLine ("User clicked on {0}", buttonArgs.ButtonIndex);
        tsc.TrySetResult(buttonArgs.ButtonIndex);
    };
    return tsc.Task;
}

//Usage
async Task PromptUser() {
    var result = await ShowModalAletViewAsync 
               ("Alert", "Do you want to continue?", "Yes", "No"); //process the result
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow