ツールバーをウィンドウのタイトルバーとして使う

Cocoa/Swift プログラミング

OS X Yosemite 対応以上のアプリであれば、NSWindow のタイトルバーに NSToolbar を使って自由度の高いタイトルバーを作れます。

NSWindow のタイトルバーで NSToolbar を使う

OS X アプリは 10.10 Yosemite から、タイトルバーに Xcode 6 のような高度な機能を簡単に実装できるようになりました。

NSWindowNSToolbar を追加して、OS X 10.10 から新設されたNSWindowtitleVisibilityプロパティ.hidden を設定することで、追加したツールバーをウィンドウのタイトルとして使えます。

NSWindow に NSToolbar を追加する

まず、NSWindow に NSToolbar を追加します。

目的のウィンドウがあるストーリーボードを開いたら、オブジェクトライブラリのToolbar を、目的のウィンドウにドロップします。

そうすると、ウィンドウにツールバーが登録されます。

標準のツールバーを非表示にする

NSWindow に NSToolbar を設定したら、NSWindow の標準タイトルバーを非表示にします。

この設定は Xcode 6.1.1 の Interface Builder のインスペクタでは設定できないようなので、NSWindowController から派生させた独自のクラスを作成して実装します。


独自のクラスを作成したら、ツールバーを追加したウィンドウを持つウィンドウコントローラーに、そのクラスを割り当てます。

そうしたら、割り当てたウィンドウコントローラーのwindowDidLoadメソッド メソッドで、次のようにして標準タイトルバーを非表示にするコードを記載します。

class MainWindowController: NSWindowController {

	override func windowDidLoad() {
    	
		super.windowDidLoad()

		// 標準タイトルバーを非表示にします。
		self.window?.titleVisibility = .Hidden
	}
}

ツールバーがタイトルバーとして表示される

このようにすることで、標準タイトルバーが非表示になり、その代わりに追加したツールバーがタイトルバーとして表示されるようになります。