我正在尝试在他们的工具栏中重新创建像Finder,Safari和Transmission这样漂亮的纹理按钮。首先,我开始只需拖动IB中的“纹理按钮”等。除了用户将工具栏设置为“仅文本”模式时,一切正常。当他点击按钮时,工具栏将自动启用“图标和标签”。我已从工具栏中删除alles代码和委托,以确保它不是代码问题。
然后,为了确保,我创建了一个新项目(根本没有代码),我可以使用带有一个NSToolbarItem的NSToolbar和一个带有NSButton的干净NSWindow重现该问题。
通过以下代码添加NSButton:
- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar {
return [NSArray arrayWithObject:@"myToolbarMenu"];
}
- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar {
return [self toolbarAllowedItemIdentifiers:toolbar];
}
- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar
itemForItemIdentifier:(NSString*)str
willBeInsertedIntoToolbar:(BOOL)flag
{
if ([str isEqualToString:@"myToolbarItem"] == YES) {
NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str];
[item setView:[[NSButton alloc] init]];
[item setMinSize:NSMakeSize(50,50)];
[item setMaxSize:NSMakeSize(50,50)];
[item setLabel:@"Text"];
return [item autorelease];
}
return nil;
}
但是这也有同样的效果:当我在“仅文本模式”中按下带有NSButton的NSToolbarItem时,工具栏本身强制它的模式为“图标和文本”。
你知道我怎么能让它正常工作,或者你可以选择创建像Safari这样漂亮的工具栏吗?
答案 0 :(得分:8)
您需要为每个具有自定义视图的NSToolbarItem添加菜单表示。在您分配NSToolbarItem的行下方添加:
NSMenuItem *menuRep = [[NSMenuItem alloc] initWithTitle:@"Text" action:@selector(targetMethod:) keyEquivalent:@""];
[menuRep setTarget:<target>];
[item setMenuFormRepresentation:menuRep];
只要目标有效,您的商品就应该保留为纯文字按钮;否则他们将被禁用。请参阅Setting a Toolbar Item's Representation。
通常,您还需要在目标中实现validateToolbarItem:但是对于自定义视图项,您需要覆盖validate:以执行适当的操作。请参阅Validating Toolbar Items。