インターフェイスファイルとInterface Builder上の作業
ToolbarControllerのインターフェイスファイル
ToolbarControllerはNSObjectのサブクラスとします。すると、インターフェイスファイルは以下の様になります。
#import <Cocoa/Cocoa.h>
@interface ToolbarController : NSObject
{
IBOutlet NSView *pictureWidthView;
IBOutlet NSView *pictureHeightView;
IBOutlet NSWindowController *windowController;
NSMutableDictionary *toolbarItems;
}
@end
アウトレットが三つ必要ですので、追加しました。二つはそれぞれ画像の幅と高さを入力するテキストフィールドが入ったビュー、一つはウィンドウコントローラです。テキストフィールドが入ったビューはNSToolbarItemを作る時に必要となります。ウィンドウコントローラはNSToolbarItemのターゲットとして指定するので、必要となります。
NSMutableDictionaryはNSToolbarItemを保持する為の辞書です。配列ではなく辞書にしているのには訳がありまして、キーでオブジェクトを呼び出せるのが便利だからです。NSToolbarは各NSToolbarItemを"identifier"というNSString型の文字列で管理しており、NSToolbarItemが必要になった時に"identifier"に対応するNSToolbarItemを要求してきます。そこでキーを"identifier"、値をNSToolbarItemにして辞書に登録しておけば、取り出すのに便利という訳です。
カスタムビューを作る
テキストフィールドが入ったビューのアウトレットを用意しましたが、このビューはInterface BuilderでRMGDocument.nibの中に作っておく必要があります。カスタムビューはパレットの中に入っている薄い青の長方形をドラッグして、nibウィンドウにドロップすれば作る事ができます。
nibウィンドウ左下の二つのアイコンが作成したカスタムビューpictureWidthViewとpictureHeightViewです。ビューのサイズは50x32としました。そのビューの中にテキストフィールドを配置して、大きさを40x19としました。
配置したテキストフィールドにバインディングを設定します。value項を、
- Bind to:File's Owner
- Controller key:なし
- Model key path:document.pictureWidth(またはpictureHeight)
とします。またテキストフィールドにはNSNumberFormatterを取り付けて、入力範囲を制限しておきます。(パレットからNSNumberFormatterをドラッグしてテキストフィールドにドロップすればOK)
ToolbarControllerをインスタンス化する
ToolbarControllerは各ドキュメントに一つ必ず必要なものなので、nibファイルでインスタンス化しておく事にします。(上のnibウィンドウでは既にインスタンス化されています)XcodeのToolbarController.hアイコンをドラッグしてnibウィンドウにドロップし、Interface BuilderにToolbarControllerクラスを認識させてからインスタンス化して下さい。