Xamarin でのアラートの表示Displaying Alerts in Xamarin.iOS

IOS 8 以降では、UIAlertController は、Uialertcontroller と Uialertcontroller が両方とも非推奨とされるようになりました。Starting with iOS 8, UIAlertController has completed replaced UIActionSheet and UIAlertView both of which are now deprecated.

UIView のサブクラスである、置き換えられたクラスとは異なり、UIAlertController は UIViewController のサブクラスです。Unlike the classes it replaced, which are subclasses of UIView, UIAlertController is a subclass of UIViewController.

表示UIAlertControllerStyleするアラートの種類を示すには、を使用します。Use UIAlertControllerStyle to indicate the type of alert to display. これらのアラートの種類は次のとおりです。These alerts types are:

  • UIAlertControllerStyleActionSheetUIAlertControllerStyleActionSheet
    • IOS より前の8これは、UIActionSheet でした。Pre-iOS 8 this would have been a UIActionSheet
  • UIAlertControllerStyleAlertUIAlertControllerStyleAlert
    • IOS より前の8これは、UIAlertView になりましたPre-iOS 8 this would have been UIAlertView

警告コントローラーを作成するには、次の3つの手順を実行する必要があります。There are three necessary steps to take when creating an Alert Controller:

  • 次のものを使用してアラートを作成および構成します。Create and configure the Alert with a:

    • titletitle
    • messagemessage
    • preferredStylepreferredStyle
  • Optionalテキストフィールドを追加する(Optional) Add a text field

  • 必要なアクションを追加するAdd the Required actions

  • ビューコントローラーを表示するPresent the View Controller

最も単純なアラートには、次のスクリーンショットに示すように、1つのボタンが含まれています。The simplest alert contains a single button, as shown in this screenshot:

1つのボタンを持つアラート

単純なアラートを表示するコードは次のとおりです。The code to display a simple alert is as follows:

okayButton.TouchUpInside += (sender, e) => {

    //Create Alert
    var okAlertController = UIAlertController.Create ("Title", "The message", UIAlertControllerStyle.Alert);

    //Add Action
    okAlertController.AddAction (UIAlertAction.Create ("OK", UIAlertActionStyle.Default, null));

    // Present Alert
    PresentViewController (okAlertController, true, null);
};

複数のオプションを使用してアラートを表示する方法は似ていますが、2つのアクションが追加されます。Displaying an alert with multiple options, is done in a similar fashion but add two actions. たとえば、次のスクリーンショットは、2つのボタンを持つアラートを示しています。For example, the following screenshot shows an alert with two buttons:

2つのボタンを含むアラート

okayCancelButton.TouchUpInside += ((sender, e) => {

    //Create Alert
    var okCancelAlertController = UIAlertController.Create("Alert Title", "Choose from two buttons", UIAlertControllerStyle.Alert);

    //Add Actions
    okCancelAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, alert => Console.WriteLine ("Okay was clicked")));
    okCancelAlertController.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, alert => Console.WriteLine ("Cancel was clicked")));

    //Present Alert
    PresentViewController(okCancelAlertController, true, null);
});

アラートには、次のスクリーンショットのような操作シートを表示することもできます。Alerts can also display an action sheet, similar to the screenshot below:

操作シートのアラート

次のメソッドを使用しAddActionて、アラートにボタンが追加されます。Buttons are added to the alert with the AddAction method:

actionSheetButton.TouchUpInside += ((sender, e) => {

    // Create a new Alert Controller
    UIAlertController actionSheetAlert = UIAlertController.Create("Action Sheet", "Select an item from below", UIAlertControllerStyle.ActionSheet);

    // Add Actions
    actionSheetAlert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default, (action) => Console.WriteLine ("Item One pressed.")));

    actionSheetAlert.AddAction(UIAlertAction.Create("custom button 1",UIAlertActionStyle.Default, (action) => Console.WriteLine ("Item Two pressed.")));

    actionSheetAlert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel, (action) => Console.WriteLine ("Cancel button pressed.")));

    // Required for iPad - You must specify a source for the Action Sheet since it is
    // displayed as a popover
    UIPopoverPresentationController presentationPopover = actionSheetAlert.PopoverPresentationController;
    if (presentationPopover!=null) {
        presentationPopover.SourceView = this.View;
        presentationPopover.PermittedArrowDirections = UIPopoverArrowDirection.Up;
    }

    // Display the alert
    this.PresentViewController(actionSheetAlert,true,null);
});