[Xamarin.Mac] サブウィンドウを閉じる

前回の記事では、セグエを使用してサブウィンドウを表示する方法を紹介しました。

今回は、サブウィンドウを閉じる方法を見ていきます。

1.事前準備

事前準備として、新規でプロジェクトを作成し、メインウィンドウにButtonを配置します。

続いて、サブウィンドウとして新しくView Controllerを追加しを1つ追加します。

最初に配置したButtonを[control]を押しながら、もう1つのView Controllerへドラッグ&ドロップし、Action Segueで「Sheet」を選択します(詳細な手順については前回の記事を参照してください)。

2.サブウィンドウの設定

次にサブウィンドウにButtonコントロールを配置して、閉じることができるように作成していきます。

はじめにButtonを追加し、テキストを「Close」に変更してください。

続いて[Close]ボタンを[control]キーを押しながらドラッグし「First Responder」へドロップします。

First Responderは、アプリケーションが起動中に最初に受け取るオブジェクトを表しています。ここでいうオブジェクトとはユーザーからのマウス操作やキーボード操作などのイベントのことです。First responderがイベントを受け取ったとしても、そのイベントウに応じられない場合もあります。このような場合は、その上位階層のオブジェクトへと順次送られて処理がされます。上位階層でも応じることができない場合は、さらに上の階層へと送られ、どのオブジェクトも処理ができない場合には警告になるか破棄されます。このような仕組みをResponder chainと呼びます。

First Responderにドロップすると、設定可能なアクションの一覧が表示されるので、一覧からdissmissControllerを選択します。dissmissControllerとはウィンドウを閉じるアクションです。

きちんとcloseボタンに dissmissControllerが接続されているかを確認しましょう。

以上で[Close]ボタンをクリックしてサブウィンドウを閉じることができるようになります。実行して動作を確認してみましょう。

3.補足(First Responderの設定確認)

First Responderの設定確認方法について説明します。

First Responderをクリックし、Connection Inspectorを開きます。Receive Actionsの一覧で「dissmissController」と[close]ボタンが接続されていることを確認できます。

[close]ボタン側でも確認をすることができます。[close]ボタンを選択してConnection Inspectorを開きます。Sent Actionsに「dismissController」があることを確認しましょう。