- (NSArray *)items で配列オブジェクトとして取得できる。画面最上部のメニューバーとメニュー項目は、同じように NSMenu クラス、NSMenuItem クラスで表現され、NSMenu からインスタンスメソッド - (NSArray *)itemArray で配列オブジェクトととして NSMenuItem を取得できる。ここで、NSMenu にはインスタンスメソッド
- (NSMenuItem *)itemWithTag:(NSInteger)aTag が存在し、NSMenuItem に設定した tag をパラメータに指定することで特定のメニュー項目を一発で取得できるのに対し、NSToolbar にはそのようなインスタンスメソッドが存在しない。今回は NSToolbar に NSMenu と同様の
- (NSToolbarItem *)itemWithTag:(NSInteger)aTag を実装する。実装するにあたり、NSToolbar のサブクラスを作るのではなく、カテゴリィを用いてメソッドを追加する形で行う。まずヘッダファイル NSToolbar+Additions.h が以下のようになる。
#import <Cocoa/Cocoa.h>
@interface NSToolbar (Additions)
- (NSToolbarItem *)itemWithTag:(NSInteger)aTag;
@end 実装ファイル NSToolbar+Additions.m は以下のようになる。#import "NSToolbar+Additions.h"
@implementation NSToolbar (Additions)
- (NSToolbarItem *)itemWithTag:(NSInteger)aTag
{
NSArray *items = [self items];
for(NSToolbarItem *item in items) {
if([item tag] == aTag) return item;
}
return nil;
}
@end 簡単ですね。これで、NSToolbar+Additions.h をインポートすれば、NSToolbar のインスタンスメソッドとして - (NSToolbarItem *)itemWithTag:(NSInteger)aTag を使えるようになる。
0 comments:
コメントを投稿