Xamarin.iOS
アラート
サーチ…
アラートを表示する
iOS 8以降のアラートではUIAlertController
を使用しUIAlertController
が、以前のバージョンではUIAlertView
を使用していUIAlertView
、現在は廃止予定です。
8.0
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);
8.0
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
以降、UIAlertControllerを使用すると、アクションシートまたはより古典的なアラートに同じアラートオブジェクトを使用できます。唯一の違いは、作成時にパラメータとして渡される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()
最後のパラメータとして使用できます。
例えば、私が "OK"を押すとprivate void DoStuff(){...}
のコードが実行されると仮定しましょう。
UIAlertAction action = UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, DoStuff);
alert.AddAction(action);
注意:私はDoStuffの後に()を使ってアクションを作成していません。
あなたがコントローラを提示する方法は、他のコントローラと同じ方法で行われます:
this.PresentViewController(alert, true, null);
モーダルアラートダイアログを表示する
ユーザー入力がiOSで処理されるまで、コード実行をブロックするためにモーダルUIAlertView
を表示するには、 NSRunLoop
を使用するのが一般的でした。 AppleがiOS7をリリースするまで、既存のアプリはほとんどなかった。幸いにも、C#の非同期/待機でそれを実装するより良い方法があります。
モーダルUIAlertViewを表示するために、async / awaitパターンを利用する新しいコードがあります:
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
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow