Xamarin.iOS
Waarschuwingen
Zoeken…
Toon een waarschuwing
Voor waarschuwingen sinds iOS 8 zou u een UIAlertController
maar voor UIAlertController
versies had u een UIAlertView
, die nu is verouderd.
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 ();
Toon een login-melding
De volgende code is voor iOS 8 en lager voor het maken van een aanmeldingsmelding.
// 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();
Geef een actieblad weer
Met de UIAlertController
die sinds UIAlertController
beschikbaar is, kunt u hetzelfde waarschuwingsobject gebruiken voor UIAlertController
of meer klassieke waarschuwingen. Het enige verschil is dat de UIAlertControllerStyle
als parameter wordt doorgegeven bij het maken.
Deze regel verandert van een AlertView in een ActionSheet, vergeleken met enkele andere voorbeelden die hier beschikbaar zijn:
var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.ActionSheet);
De manier waarop u acties toevoegt aan de controller is nog steeds hetzelfde:
alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
// ExecuteSomeAction();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));
//Add additional actions if necessary
Merk op dat als u een parameterloze void-methode hebt, u deze kunt gebruiken als de laatste parameter van de .AddAction()
.
Laten we bijvoorbeeld aannemen dat ik de code van private void DoStuff(){...}
wil uitvoeren als ik op "OK" druk:
UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);
Merk op dat ik de () na DoStuff niet gebruik bij het maken van de actie.
De manier waarop u de controller presenteert, gebeurt op dezelfde manier als elke andere controller:
this.PresentViewController(alert, true, null);
Dialoogvenster Modal Alert weergeven
Het was gebruikelijk om NSRunLoop
te gebruiken om modale UIAlertView
te tonen om code-uitvoering te blokkeren totdat gebruikersinvoer wordt verwerkt in iOS; totdat Apple de iOS7 uitbracht, brak het enkele bestaande apps. Gelukkig is er een betere manier om het te implementeren met C #'s async / await.
Hier is de nieuwe code die gebruikmaakt van async / await patroon om modale UIAlertView te tonen:
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
}