Xamarin.iOS
avvisi
Ricerca…
Mostra un avviso
Per gli avvisi a partire da iOS 8, si userebbe un UIAlertController
ma per le versioni precedenti sarebbe stato utilizzato UIAlertView
, che ora è deprecato.
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 ();
Mostra un avviso di accesso
Il seguente codice è per iOS 8 e inferiore per la creazione di un avviso di accesso.
// 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();
Mostra un foglio di azione
UIAlertController
disponibile da iOS8 consente di utilizzare lo stesso oggetto di avviso per i fogli azione o per gli avvisi più classici. L'unica differenza è che UIAlertControllerStyle
passato come parametro durante la creazione.
Questa linea cambia da AlertView a ActionSheet, rispetto ad altri esempi disponibili qui:
var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.ActionSheet);
Il modo in cui aggiungi azioni al controller è sempre lo stesso:
alert.AddAction(UIAlertAction.Create(otherTitle, UIAlertActionStyle.Destructive, (action) => {
// ExecuteSomeAction();
}));
alert.AddAction(UIAlertAction.Create(cancelTitle, UIAlertActionStyle.Cancel, null));
//Add additional actions if necessary
Si noti che se si dispone di un metodo void senza parametri, è possibile utilizzarlo come ultimo parametro di .AddAction()
.
Ad esempio, supponiamo di voler private void DoStuff(){...}
il codice del private void DoStuff(){...}
quando premo "OK":
UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);
Si noti che non sto usando () dopo DoStuff nella creazione dell'azione.
Il modo in cui si presenta il controller è fatto allo stesso modo di qualsiasi altro controller:
this.PresentViewController(alert, true, null);
Visualizza la finestra di dialogo degli avvisi modali
Era prassi comune utilizzare NSRunLoop
per mostrare UIAlertView
modale per bloccare l'esecuzione del codice fino a quando l'input dell'utente non viene elaborato in iOS; fino a quando Apple ha rilasciato iOS7, ha rotto alcune app esistenti. Fortunatamente, c'è un modo migliore di implementarlo con asincrona / attesa di C #.
Ecco il nuovo codice che sfrutta il modello async / await per mostrare UIAlertView modale:
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
}