在使用完全代码的窗体中,应该需要这段代码加入toolbar。
NSToolbar *tb = [[[NSToolbar alloc] initWithIdentifier:@"abc"] autorelease]; //如果缺少了识别码,运行会报错的
self.window.toolbar =tb;
对于通过xib文件或者storyboard添加的窗体,应该不需要的。
接下来需要对self.window.toolbar设置一下
[self.window.toolbar setAllowsUserCustomization:YES]; //允许自定义toolbar
[self.window.toolbar setAutosavesConfiguration:YES]; //允许保存
[self.window.toolbar setDelegate:(id)self]; //设置代理类
[self.window.toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel]; //设置显示类型为图片+文字
接下来用到几个toolbar相关的接口
-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
{
//NSToolbarFlexibleSpaceItem
//zoom
NSArray *list = [NSArray arrayWithObjects:@"add-abc", nil];
return list;
}
-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
{
NSArray *list = [NSArray arrayWithObjects:@"add-abc", nil];
return list;
}
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
if ([itemIdentifier isEqualToString:@"add-abc"]) {
NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:@"add-abc"] autorelease];
[item setImage:[NSImage imageNamed:@"Add-ABC"]];
[item setPaletteLabel:@"ABC TEST"];
[item setLabel:@"ABC TEST"];
[item setMinSize:CGSizeMake(25, 25)];
[item setMaxSize:CGSizeMake(100, 100)];
[item setTarget:self];
[item setAction:@selector(onAddABC:)];
return item;
}
else
{
//窗体上的toolbar自动放行
NSToolbarItem *item = nil;
for (int i=0; i<self.window.toolbar.items.count; i++) {
NSToolbarItem *tmp = [self.window.toolbar.items objectAtIndex:i];
if ([tmp.itemIdentifier isEqualToString:itemIdentifier]) {
item = tmp;
break;
}
}
return item;
}
return nil;
}
-(IBAction)onAddABC:(id)sender
{
NSLog(@"%s",__FUNCTION__);
}
解释一下,这里是添加一个识别码为“add-abc”,图片名为“Add-ABC.png”(jpg也可以的),标题为“ABC TEST”的项。这些类似流程在网上应该不难找到,然而很尴尬的发现,窗体界面并没有看到自定义项,需要在toolbar上右键才找到“ABC TEST”,需要手动拉到显示区域。原因是在初始化的时候少了一段代码。所以要将第二个代码段改一下,如下:
[self.window.toolbar setAllowsUserCustomization:YES];
[self.window.toolbar setAutosavesConfiguration:YES];
[self.window.toolbar setDelegate:(id)self];
[self.window.toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
[self.window.toolbar insertItemWithItemIdentifier:@"add-abc" atIndex:0]; //添加这行就能在toolbar上默认显示。