我正在尝试从NSToolbarItem打开一个弹出菜单。 我尝试了这个示例,但我无法使用该类方法,因为NSToolbar和NSToolbarItem继承自NSObject而不是NSView。
除了创建自定义视图之外,从NSToolbarItem打开弹出菜单的最佳方法是什么?
我正在尝试从NSToolbarItem打开一个弹出菜单。 我尝试了这个示例,但我无法使用该类方法,因为NSToolbar和NSToolbarItem继承自NSObject而不是NSView。
除了创建自定义视图之外,从NSToolbarItem打开弹出菜单的最佳方法是什么?
基本上,您需要创建一个类似于NSButton
的东西,并将其附加到NSMenu
,然后使用NSToolbarItem
的setView:
方法将按钮嵌入到工具栏项中。
在IB中创建一个带有所需菜单的NSView。然后在您的窗口控制器中,添加以下代码:
// This assumes you have a window property pointing to the window to which you'll
// add the toolbar. It also assumes you've connected the NSView to add to the
// toolbar to a member called toolbarView.
- (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:@"myToolbarMenu"] == YES) {
NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str];
[item setView:toolbarView];
[item setMinSize:[toolbarView frame].size];
[item setMaxSize:[toolbarView frame].size];
return [item autorelease];
}
return nil;
}
- (void)windowDidLoad {
NSToolbar* toolbar = [[NSToolbar alloc] initWithIdentifier:@"myToolbar"];
[toolbar setDelegate:self];
[self.window setToolbar:[toolbar autorelease]];
}
提醒:这篇文章已经过时,但我只是在浏览,我有一个简单的方法,所以我想给出一个答案,以防其他人查看。我发现我无法直接从库中将弹出式按钮拖到Interface Builder中的工具栏。但是,我可以从窗口将弹出式按钮拖到工具栏中。因此,我首先在窗口上创建弹出式按钮,然后将其拖到工具栏上...它有效!其他对象也是如此。
如果您想要一个实际的弹出式按钮用于工具栏项,请将NSPopUpButton设置为工具栏项的视图。
在Interface Builder 3.2.1中(我不知道这个功能实际上是什么时候引入的),您可以在nib窗口中对象的分层列表中深入到工具栏,并从库面板中将弹出式按钮拖入列表中的工具栏。IB会为您包装按钮,使其成为工具栏项。
menu
是一个 NSMenu
对象,sender
是一个 NSToolbarItem
,那么您只需要将 sender.view
传递给显示菜单即可。如果您已经通过 Interface Builder 设置了 NSToolbarItem
,则无需添加其他视图。请注意保留 HTML 标签。
[NSMenu popUpContextMenu:menu
withEvent:[NSApp currentEvent]
forView:sender.view];