gpt4 book ai didi

cocoa - NSToolbarItem (setView) 中的 NSButton 在 "Text only"中单击时强制模式为 "Icon and Label"

转载 作者:行者123 更新时间:2023-12-03 16:07:33 28 4
gpt4 key购买 nike

我正在尝试重新创建工具栏中的 Finder、Safari 和 Transmission 等漂亮的纹理按钮。首先,我首先在 IB 等中拖入“纹理按钮”。除非用户将工具栏设置为“仅文本”模式,否则一切正常。然后,当他单击该按钮时,工具栏将自行启用“图标和标签”。我已从工具栏中删除了所有代码和委托(delegate),以确保这不是代码问题。

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

通过如下代码添加 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 等漂亮的工具栏项目吗?

最佳答案

您需要向每个具有自定义 View 的 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: ,但对于自定义 View 项,您需要重写 validate: 来执行适当的操作。请参阅Validating Toolbar Items .

关于cocoa - NSToolbarItem (setView) 中的 NSButton 在 "Text only"中单击时强制模式为 "Icon and Label",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com