今回はコード解説。
AppController.m を用意し、ターゲットの NSWindowをアウトレットに接続しておく。
@interface AppController : NSObject {
IBOutlet NSWindow* _window;
}
まず awakeFromNib でツールバーのインスタンスを作成し、NSWindowへ設定する。Delegateは自身(AppController)とする。
- (void)awakeFromNib
{
NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:@"TOOLBAR"] autorelease];
[toolbar setDelegate:self];
[_window setToolbar:toolbar];
}
その上で必要な Delegateメソッドを実装していく。
まずは toolbarDefaultItemIdentifiers: から。
- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
{
return [NSArray arrayWithObjects:@"HELLO", nil];
}
デフォルトで表示するツールバーアイテム(NSToolbarItem)の識別子(ItemIdentifier)のリストを返す。フレームワーク(cocoa)がこれを元にツールバーを構成していく。
同じく toolbarAllowedItemIdentifiers: も実装しておく。
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
{
return [NSArray arrayWithObjects:@"HELLO", nil];
}
そして toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:
引数で渡された ItemIdentifier を元にして必要なツールバーアイテムのインスタンスを作成し、これを返す。
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];
if ([itemIdentifier isEqual:@"HELLO"]) {
[toolbarItem setLabel:@"Hello"];
[toolbarItem setImage:[NSImage imageNamed:@"hello"]];
[toolbarItem setTarget:self];
[toolbarItem setAction:@selector(hello:)];
} else {
toolbarItem = nil;
}
return toolbarItem;
}
最後にツールバーアイテムがクリックされた時のアクションターゲット hello:
- (void)hello:(id)sender
{
NSLog(@"hello");
}
サンプルではログに "hello" と表示している。