NSToolbarItem(setView)中的NSButton单击"仅文本"时强制模式为"图标和标签"

Ger*_*nis 7 cocoa interface-builder nstoolbar nstoolbaritem

我试图在他们的工具栏中重新创建像Finder,Safari和Transmission这样漂亮的纹理按钮.首先,我开始只需拖动IB中的"纹理按钮"等.除了用户将工具栏设置为"仅文本"模式时,一切正常.当他点击按钮时,工具栏将自动启用"图标和标签".我已从工具栏中删除alles代码和委托,以确保它不是代码问题.

然后,为了确保,我创建了一个新项目(根本没有代码),我可以用一个带有NSToolbar的干净NSWindow重现这个问题,其中一个NSToolbarItem带有一个NSButton.

通过以下代码添加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;
}
Run Code Online (Sandbox Code Playgroud)

但这也有同样的效果:当我在"仅文本模式"中按下带有NSButton的NSToolbarItem时,工具栏本身会强制它的模式为"图标和文本".

您是否知道如何使其正常工作或者可能有另外一种方法来创建像Safari等一样漂亮的工具栏?

Sco*_* K. 8

您需要向具有自定义视图的每个NSToolbarItem添加菜单表示.在您分配NSToolbarItem的行下方添加以下内容:

NSMenuItem *menuRep = [[NSMenuItem alloc] initWithTitle:@"Text" action:@selector(targetMethod:) keyEquivalent:@""];
[menuRep setTarget:<target>];
[item setMenuFormRepresentation:menuRep];
Run Code Online (Sandbox Code Playgroud)

只要目标有效,您的项目就应该保留为纯文本按钮; 否则他们将被禁用.请参阅设置工具栏项的表示.

通常,您还需要在目标中实现validateToolbarItem:但对于自定义视图项,您需要覆盖validate:以执行适当的操作.请参阅验证工具栏项.