前回のCocoa版Hello World作成の続きです。今回はウインドウコントローラクラスを追加して、Cocoa版Hello Worldで表示されるウインドウのウインドウコントローラを変更する方法について解説します。
この記事では前回の記事で作成したCocoa版Hello Worldのプロジェクト一式を使用します。前回の記事に沿ってプロジェクトを作成している場合は、それを開いてください。作成されていない方は、前回の記事の末尾から、前回の最終状態のサンプルコードをダウンロードできるので、そちらをご利用ください。
ウインドウコントローラとは?
AppKitでのウインドウ制御は、ウインドウと、そのウインドウを管理するウインドウコントローラによって構成されています。ここでMain.storyboard
を開いてください。
スクリーンキャプチャで囲んだ場所に注目してください。次の3つのシーンが入っています。
- Application Scene
- Window Controller Scene
- View Controller Scene
今回、解説するのはWindow Controller Sceneです。Window Controller Sceneのディスクロージャーボタンを開くと、Window Controllerが見つかります。更にWindow Controllerのディスクロージャーボタンを開くと、Windowが見つかります。
このように、WindowはWindow Controllerが管理していて、それをWindow Controller Sceneが管理しています。
Window Controller Sceneを選択し、アトリビュートインスペクタを開いてください。「Is Initial Controller」という項目がオンになっています。「Is Initial Controller」がオンになっているWindow Controller Sceneは、Storyboardファイルが読み込まれたときに、最初に使われるシーンになります。
つまり、Main.storyboard
が読み込まれると、Window Controller Sceneが使われて、Window Controller Sceneが管理しているWindow Controllerがロードされ、Window Controllerが管理しているWindowが表示されるという流れになります。
ウインドウコントローラクラスを追加する
AppKitでは、ウインドウコントローラのクラスはNSWindowController
クラスです。AppKitはウインドウに対して何かしらの操作が行われたり、ウインドウの状態が変更されたりすると、ウインドウを管理するウインドウコントローラクラスのメソッドを実行したり、ウインドウのデリゲートのデリゲートメソッドを呼んだりします。
AppKitのアプリを作るときは、NSWindowController
クラスのサブクラスを作って、アプリ独自の処理を実装します。
Cocoa版Hello Worldでもウインドウコントローラを作って見ましょう。
クラスの追加
まずは、クラスをプロジェクトに追加します。次のように操作します。
設定項目 | 説明 |
---|---|
Class |
HelloWindowController
|
Subclass of |
NSWindowController
|
Also create XIB file for user interface | オフ |
Language | Swift |
import Cocoa
class HelloWindowController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
}
インスタンス化されるクラスを変更する
Main.storyboard
が読み込まれて、Window Controller Sceneが表示されるときに、NSWindowController
クラスのインスタンスが作成されて、ウインドウが表示されます。
インスタンス化されるクラスを、NSWindowController
クラスからHelloWindowController
クラスに変更します。次のように操作します。
これで、インスタンス化されるクラスがHelloWindowController
クラスに変更されます。
サンプルコードのダウンロード
今回の記事で作成したCocoa版Hello Worldはこちらからダウンロードできます。