Xamarin.Mac のアラートAlerts in Xamarin.Mac

この記事では、Xamarin.Mac アプリケーションでのアラートの操作について説明します。C# コードからのアラートの作成と表示、およびユーザー操作への応答について説明します。This article covers working with alerts in a Xamarin.Mac application. It describes creating and displaying alerts from C# code and responding to user interactions.

Xamarin.Mac アプリケーションで C# と .NET を使用する場合、開発者が作業しているアラートと Xcode と同じ Objective-C アラートにアクセス できます。When working with C# and .NET in a Xamarin.Mac application, you have access to the same Alerts that a developer working in Objective-C and Xcode does.

アラートは、重大な問題が発生した場合 (エラーなど)、または警告 (ファイルを削除する準備など) として表示される特殊な種類のダイアログです。An alert is a special type of dialog that appears when a serious problem occurs (such as an error) or as a warning (such as preparing to delete a file). アラートはダイアログなので、閉じ前にユーザーの応答も必要です。Because an alert is a dialog, it also requires a user response before it can be closed.

アラートの例An example alert

この記事では、Xamarin.Mac アプリケーションでアラートを操作する基本について説明します。In this article, we'll cover the basics of working with Alerts in a Xamarin.Mac application.

アラートの概要Introduction to Alerts

アラートは、重大な問題が発生した場合 (エラーなど)、または警告 (ファイルを削除する準備など) として表示される特殊な種類のダイアログです。An alert is a special type of dialog that appears when a serious problem occurs (such as an error) or as a warning (such as preparing to delete a file). アラートは、ユーザーがタスクを続行する前にユーザーを閉じなければならないので、ユーザーを中断します。アラートは、必要な場合を限り表示しないようにしてください。Because Alerts disrupt the user since they must be dismissed before the user can continue on with their task, avoid displaying an alert unless it’s absolutely necessary.

Apple では、次のガイドラインを推奨しています。Apple suggest the following guidelines:

  • 単にユーザーに情報を提供するためにアラートを使用しない。Don't use an alert merely to give users information.
  • 一般的な取り消し可能なアクションのアラートは表示されません。Do not display an alert for common, undoable actions. その状況によってデータ損失が発生する可能性がある場合でも、Even if that situation might cause data loss.
  • 状況がアラートに値する場合は、他の UI 要素またはメソッドを使用して表示しないようにしてください。If a situation is worthy of an alert, avoid using any other UI element or method to display it.
  • 注意アイコンは慎重に使用する必要があります。The Caution icon should be used sparingly.
  • アラート メッセージでアラートの状況を明確に簡潔に説明します。Describe the alert situation clearly and succinctly in the alert message.
  • 既定のボタン名は、アラート メッセージで説明するアクションに対応している必要があります。The Default Button name should correspond to the action you describe in your alert message.

詳細については、Apple のOS X ヒューマン インターフェイス ガイドラインの「アラート」セクションを参照してください。For more information, see the Alerts section of Apple's OS X Human Interface Guidelines

アラートの構造Anatomy of an Alert

上記のように、重大な問題が発生した場合、またはデータ損失の可能性に対する警告 (未保存のファイルを閉じるなど) として、アプリケーションのユーザーにアラートを表示する必要があります。As stated above, alerts should be shown to your application's user when a serious problem occurs or as a warning to potential data loss (such as closing an unsaved file). Xamarin.Mac では、C# コードでアラートが作成されます。次に例を示します。In Xamarin.Mac, an alert is created in C# code, for example:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Critical,
  InformativeText = "We need to save the document here...",
  MessageText = "Save Document",
};
alert.RunModal ();

上記のコードでは、警告アイコン、タイトル、警告メッセージ、および 1 つの [OK] ボタンにアプリケーション アイコンが重ね合わされたアラートが表示されます。The code above displays an alert with the applications icon superimposed on the warning icon, a title, a warning message and a single OK button:

[OK] ボタンを含むアラートAn alert with a OK button

Apple には、アラートをカスタマイズするために使用できるいくつかのプロパティが提供されています。Apple provides several properties that can be used to customize an alert:

  • AlertStyle では、アラートの種類を次のいずれかの方法で定義します。AlertStyle defines the type of an alert as one of the following:
    • 警告 - 重大ではない現在または差し迫ったイベントをユーザーに警告するために使用されます。Warning - Used to warn the user a current or impending event that is not critical. これは、既定のスタイルです。This is the default style.
    • 情報 - 現在または差し迫ったイベントについてユーザーに警告するために使用されます。Informational - Used to warn the user about a current or impending event. 現時点では、警告と情報の間に目 見える 違いはありませんCurrently, there is no visible difference between a Warning and a Informational
    • 重大 - 差し迫ったイベントの重大な結果 (ファイルの削除など) についてユーザーに警告するために使用されます。Critical - Used to warn the user about severe consequences of an impending event (such as deleting a file). この種類のアラートは、注意して使用する必要があります。This type of alert should be used sparingly.
  • MessageText - これはアラートのメイン メッセージまたはタイトルであり、ユーザーに状況をすばやく定義する必要があります。MessageText - This is the main message or title of the alert and should quickly define the situation to the user.
  • InformativeText - これは、状況を明確に定義し、ユーザーに可能なオプションを提示する必要があるアラートの本文です。InformativeText - This is the body of the alert where you should define the situation clearly and present workable options to the user.
  • アイコン - カスタム アイコンをユーザーに表示できます。Icon - Allows a custom icon to be displayed to the user.
  • HelpAnchor & ShowsHelp - アラートをアプリケーションのヘルプブックに関連付け、アラートのヘルプを表示できます。HelpAnchor & ShowsHelp - Allows the alert to be tied into the application HelpBook and display help for the alert.
  • ボタン - 既定では、アラートには [OK] ボタンしか表示されませんが 、Buttons コレクションを使用すると、必要に応じてさらに選択肢を追加できます。Buttons - By default, an alert only has the OK button but the Buttons collection allows you to add more choices as needed.
  • ShowsSuppressionButton - ユーザーがトリガーしたイベントの後続の発生に対してアラートを抑制するために使用できるチェック ボックスが true 表示される場合。ShowsSuppressionButton - If true displays a checkbox that the user can use to suppress the alert for subsequent occurrences of the event that triggered it.
  • AccessoryView - 別のサブビューをアラートにアタッチして、データ エントリのテキスト フィールドの追加など、追加の 情報を提供 できます。AccessoryView - Allows you to attach another subview to the alert to provide extra information, such as adding a Text Field for data entry. 新しい AccessoryView を設定する 場合、または既存の AccessoryView を変更する場合は、 メソッドを呼び出して、アラートの表示レイアウト Layout() を調整する必要があります。If you set a new AccessoryView or modify an existing one, you need to call the Layout() method to adjust the visible layout of the alert.

アラートの表示Displaying an Alert

アラートを表示するには、2 つの異なる方法があります(Free-Floatingまたはシートとして表示できます。There are two different ways that an alert can be displayed, Free-Floating or as a Sheet. 次のコードでは、アラートが free-floating として表示されます。The following code displays an alert as free-floating:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.RunModal ();

このコードを実行すると、次が表示されます。If this code is run, the following is displayed:

単純なアラートA simple alert

次のコードでは、シートと同じアラートが表示されます。The following code displays the same alert as a Sheet:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.BeginSheet (this);

このコードを実行すると、次のコードが表示されます。If this code is run, the following will be displayed:

シートとして表示されるアラートAn alert displayed as a sheet

アラート ボタンの操作Working with Alert Buttons

既定では、[アラート] には [OK] ボタンだけが表示 されます。By default, an Alert displays only the OK button. ただし、それに限定されるわけではありませんが、Buttons コレクションに追加することで追加の ボタンを作成 できます。However, you are not limited to that, you can create extra buttons by appending them to the Buttons collection. 次のコードでは 、[OK]、[ キャンセル]、および [可能性] ボタンを使用して、空 きフローティング アラート を作成 します。The following code creates a free-floating alert with a OK, Cancel and Maybe button:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
var result = alert.RunModal ();

最初に追加されるボタンは、ユーザーがEnter キーを押すとアクティブになる既定のボタンです。The very first button added will be the Default Button that will be activated if the user presses the Enter key. 返される値は、ユーザーが押したボタンを表す整数になります。The returned value will be an integer representing which button the user pressed. この例では、次の値が返されます。In our case the following values will be returned:

  • OK - 1000。OK - 1000.
  • キャンセル - 1001。Cancel - 1001.
  • おそらく - 1002。Maybe - 1002.

コード を実行すると、次の情報が表示されます。If we run the code , the following will be displayed:

3 つのボタン オプションを含むアラートAn alert with three button options

シートと同じアラートのコードを次に示します。Here is the code for the same alert as a Sheet:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}", result);
});

このコードを実行すると、次のコードが表示されます。If this code is run, the following will be displayed:

シートとして表示される 3 つのボタン アラートA three button alert displayed as a sheet

重要

アラートに 3 つ以上のボタンを追加する必要があります。You should never add more than three buttons to an alert.

[抑制] ボタンの表示Showing the Suppress Button

アラートの プロパティが の場合、アラートは、ユーザーがトリガーしたイベントの後続の発生に対してアラートを抑制するために使用できるチェック ボックス ShowSuppressButton true を表示します。If the Alert's ShowSuppressButton property is true, the alert displays a checkbox that the user can use to suppress the alert for subsequent occurrences of the event that triggered it. 次のコードでは、抑制ボタンを含む空きフローティング アラートが表示されます。The following code displays a free-floating alert with a suppress button:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
var result = alert.RunModal ();
Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);

の値が の alert.SuppressionButton.State 場合 NSCellStateValue.On 、ユーザーは [抑制] チェック ボックスをオンにしています。それ以外の場合はオンにしません。If the value of the alert.SuppressionButton.State is NSCellStateValue.On, the user has checked the Suppress checkbox, else they have not.

コードを実行すると、次の情報が表示されます。If the code is run, the following will be displayed:

抑制ボタンを含むアラートAn alert with a suppress button

シートと同じアラートのコードを次に示します。Here is the code for the same alert as a Sheet:

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);
});

このコードを実行すると、次のコードが表示されます。If this code is run, the following will be displayed:

抑制ボタンがシートとして表示されるアラートAn alert with a suppress button display as a sheet

カスタム サブビューの追加Adding a Custom SubView

アラートには、 AccessoryView アラートをさらにカスタマイズし、ユーザー入力用のテキスト フィールドなど 追加するために使用できるプロパティがあります。Alerts have an AccessoryView property that can be used to customize the alert further and add things like a Text Field for user input. 次のコードでは、テキスト入力フィールドが追加された空きフローティング アラートを作成します。The following code creates a free-floating alert with an added text input field:

var input = new NSTextField (new CGRect (0, 0, 300, 20));

var alert = new NSAlert () {
AlertStyle = NSAlertStyle.Informational,
InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.AccessoryView = input;
alert.Layout ();
var result = alert.RunModal ();
Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);

ここで重要な行 var input = new NSTextField (new CGRect (0, 0, 300, 20)); は、アラートを追加する新しい テキスト フィールドを作成する行です。The key lines here are var input = new NSTextField (new CGRect (0, 0, 300, 20)); which creates a new Text Field that we will be adding the alert. alert.AccessoryView = input; テキスト フィールドをアラート アタッチし、 メソッドを呼び出します。これは、新しいサブビューに合わせてアラートのサイズを Layout() 変更するために必要です。alert.AccessoryView = input; which attaches the Text Field to the alert and the call to the Layout() method, which is required to resize the alert to fit in the new subview.

コードを実行すると、次の情報が表示されます。If we run the code, the following will be displayed:

コードを実行すると、次の情報が表示されます。If we run the code, the following will be displayed

シートと同じアラートを次に示します。Here is the same alert as a sheet:

var input = new NSTextField (new CGRect (0, 0, 300, 20));

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.AccessoryView = input;
alert.Layout ();
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);
});

このコードを実行すると、次の情報が表示されます。If we run this code, the following will be displayed:

カスタム ビューを含むアラートAn alert with a custom view

まとめSummary

この記事では、Xamarin.Mac アプリケーションでのアラートの操作について詳しく説明しました。This article has taken a detailed look at working with Alerts in a Xamarin.Mac application. アラートの種類と用途、アラートを作成およびカスタマイズする方法、C# コードでアラートを使用する方法について説明しました。We saw the different types and uses of Alerts, how to create and customize Alerts and how to work with Alerts in C# code.