Xamarin.iOS
Оповещения
Поиск…
Показать оповещение
Для предупреждений с iOS 8 вы должны использовать UIAlertController
но для версий раньше вы использовали бы UIAlertView
, который теперь устарел.
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);
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
}