Xamarin.iOS
Alerty
Szukaj…
Wyświetl alert
W przypadku alertów od iOS 8 używałbyś UIAlertController
ale w przypadku wcześniejszych wersji używałbyś UIAlertView
, który jest teraz przestarzały.
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 ();
Wyświetl alert logowania
Poniższy kod dotyczy iOS 8 i niższych w celu utworzenia alertu logowania.
// 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();
Wyświetl arkusz akcji
UIAlertController
dostępny od iOS8 pozwala na użycie tego samego obiektu alertu w arkuszach akcji lub w bardziej klasycznych alertach. Jedyną różnicą jest UIAlertControllerStyle
przekazany jako parametr podczas tworzenia.
Ta linia zmienia się z AlertView na ActionSheet, w porównaniu do innych przykładów dostępnych tutaj:
var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.ActionSheet);
Sposób dodawania akcji do kontrolera jest nadal taki sam:
alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
// ExecuteSomeAction();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));
//Add additional actions if necessary
Zauważ, że jeśli masz .AddAction()
metodę void, możesz jej użyć jako ostatniego parametru .AddAction()
.
Załóżmy na przykład, że chcę, aby kod private void DoStuff(){...}
był wykonywany po naciśnięciu „OK”:
UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);
Zauważ, że nie używam () po DoStuff do tworzenia akcji.
Sposób prezentacji kontrolera odbywa się w taki sam sposób jak każdy inny kontroler:
this.PresentViewController(alert, true, null);
Wyświetl Modalne okno dialogowe alertu
Powszechną praktyką było używanie NSRunLoop
do pokazywania modalnego UIAlertView
do wykonywania kodu blokowego, dopóki dane wejściowe użytkownika nie zostaną przetworzone w iOS; dopóki Apple nie wypuściło iOS7, zepsuło kilka istniejących aplikacji. Na szczęście istnieje lepszy sposób zaimplementowania go za pomocą async / czekaj w języku C #.
Oto nowy kod wykorzystujący wzorzec asynchroniczny / oczekujący, aby pokazać modalny 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
}