Xamarin.iOS
Las alertas
Buscar..
Mostrar una alerta
Para Alertas desde iOS 8, usaría un UIAlertController
pero para las versiones anteriores, habría usado un UIAlertView
, que ahora está en desuso.
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 ();
Mostrar una alerta de inicio de sesión
El siguiente código es para iOS 8 e inferior para crear una alerta de inicio de sesión.
// 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();
Mostrar una hoja de acción
El UIAlertController
disponible desde iOS8 le permite usar el mismo objeto de alerta para hojas de acción o para alertas más clásicas. La única diferencia es el UIAlertControllerStyle
pasado como parámetro al crear.
Esta línea cambia de un AlertView a un ActionSheet, en comparación con algunos otros ejemplos disponibles aquí:
var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.ActionSheet);
La forma en que agrega acciones al controlador sigue siendo la misma:
alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
// ExecuteSomeAction();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));
//Add additional actions if necessary
Tenga en cuenta que si tiene un método de anulación sin parámetros, puede usarlo como el último parámetro de .AddAction()
.
Por ejemplo, supongamos que quiero que se ejecute el código de private void DoStuff(){...}
cuando private void DoStuff(){...}
"Aceptar":
UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);
Note que no estoy usando el () después de DoStuff en la creación de la acción.
La forma en que presenta el controlador se realiza de la misma manera que cualquier otro controlador:
this.PresentViewController(alert, true, null);
Mostrar el diálogo de alerta modal
Era una práctica común usar NSRunLoop
para mostrar UIAlertView
modal para bloquear la ejecución del código hasta que la entrada del usuario se procesa en iOS; Hasta que Apple lanzó el iOS7, rompió algunas aplicaciones existentes. Afortunadamente, hay una mejor manera de implementarlo con async / await de C #.
Aquí está el nuevo código que aprovecha el patrón async / await para mostrar UIAlertView modal:
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
}