[英]How to add a pop-up menu to a NSToolbarItem?
我正在尝试从NSToolbarItem打开一个弹出菜单。 我尝试了这个例子但是我不能使用那个类方法,因为NSToolbar和NSToolbarItem继承自NSObject而不是NSView。
除了创建自定义视图外,从NSToolbarItem打开弹出菜单的最佳方法是什么?
基本上,你创建类似NSButton
东西,它附有一个NSMenu
,然后使用NSToolbarItem
的setView:
方法将该按钮嵌入到toolbarItem中。
只需在您的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]];
}
如果需要工具栏项的实际弹出按钮,请将NSPopUpButton设置为工具栏项的视图。
在Interface Builder 3.2.1中(我不知道何时实际引入了此功能),您可以深入查看nib窗口中对象的分层列表中的工具栏,并将“库”选项板中的弹出按钮拖到列表中的工具栏。 IB将为您包装工具栏项中的按钮。
仅供参考:这篇文章很长,但我只是在浏览,我有一个简单的方法,所以我想我会给出一个答案,万一其他人看一看。 我发现无法将弹出按钮直接拖到Interface Builder中的工具栏中。 但是,我可以将弹出按钮从窗口拖到工具栏。 所以我首先在窗口上创建弹出按钮,然后将其拖动到工具栏......它可以工作! 与其他对象相同。
假设menu
是NSMenu
对象而sender
是NSToolbarItem
,那么您需要做的就是传入sender.view
来显示菜单。 如果您已通过Interface Builder设置了NSToolbarItem
,则无需添加其他视图。
[NSMenu popUpContextMenu:menu
withEvent:[NSApp currentEvent]
forView:sender.view];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.