ウィンドウを再度開く方法はいくつかあるけど、今回作るアプリはオレブラウザでシングルウィンドウスタイルにしようと思ってる。タブも別ウィンドウもない。コンテンツは常にメインのウィンドウで表示。なんでこんな仕様にするのか理由はあるけどそれは後々にでも。
まず現在のアプリの動作確認から。Document Basedではないアプリケーションはメインウィンドウが一つ用意されている。このウィンドウって一度閉じると再度開く方法がデフォルトで用意されていない。さすがにそれは面倒くさいアプリなので何とかする。
何とかするその1、ウィンドウを再度開くメニューを作る。
MainMenu.xibはウィンドウだけでなくメニューバーのデザインも出来る。当然だね。WindowメニューにShow Windowというメニューを用意してそれで再度開くようにする。
まず編集画面の上部にあるメニューバーのWindowをクリック。するとアプリと同様にメニューが表示される。

ここもツールバーのようにメニューアイテムを追加削除できるので、ここにShow Windowメニューアイテムを作る。メニューアイテムは例によってObject LibraryからMenu ItemオブジェクトをD&Dする。ついでにSeparatar Menu Itemも追加。



追加したItemをダブルクリックすると名前が変更出来るので「Show Window」とする。

続いてメニューにウィンドウを再度開くアクションを関連付ける。関連付けする為にはウィンドウを操作するオブジェクトを用意する必要がある。そのオブジェクトはNSWindowControllerというオブジェクト。これには予め再度開くアクションが用意されているよ。
オブジェクトをマウスで操作してデザインできるように準備。Object LibraryからObjectを探す。それをツールバーみたいなとこ(今後はObjectsリストって呼ぶ)にD&D。


Objectsリストに置いたObjectが選択された状態で右サイドバーをIdentitiy inspectorに変更。そこにあるClassでNSWindowControllerを選択。キーボード入力でエンターキー確定でもいい。ObjectがWindow Controllerという名前に変わっているはず。マウスオーバーして確認。


Window Controllerを右クリックするとメニューが表示される。その中にshowWindowという項目があるのでそいつの右の丸のところを左クリックしてメニューアイテムのShow Windowと関連付ける。やり方はツールバーの時とほぼ一緒。



これでShow WindowメニューでWindow ControllerのshowWindowが実行されるようになる訳だけどWindow ControllerはどのウィンドウをshowWindowするのかをまだ知らないので設定する必要がある。設定はアクション同様にメニューから。使用する項目はwindow。

関連付ける線のターゲットはブラウザ画面となるメインウィンドウであることに注意。WebViewとかではないから。図のようになっていればオッケー。


これでメニューからウィンドウを再度開くことが出来るようになる。早速実行して動作確認を。閉じたり開いたりできるはず。
再度開くと言っているけど実は閉じるコマンドではウィンドウは見えなくなっているだけ。アプリケーションを隠すメニューの動作とは厳密に言うと違うのだけどね。隠れているだけなのはウェブのビデオや音楽再生をしているとわかる。再生したまま閉じても音が鳴り続くから。
今回はここまで。次回は再度ウィンドを開くよう何とかするその2。たぶん。
0 件のコメント:
コメントを投稿