我正在尝试从NSToolbarItem打开一个弹出菜单。我尝试了this示例,但我不能使用该类方法,因为NSToolbar和NSToolbarItem继承自NSObject而不是NSView。
除了创建自定义视图外,从NSToolbarItem打开弹出菜单的最佳方法是什么?
答案 0 :(得分:4)
基本上,您创建了NSButton
附加了NSMenu
的内容,然后使用NSToolbarItem
的{{1}}方法将该按钮嵌入到toolbarItem中。
答案 1 :(得分:3)
只需在您的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]];
}
答案 2 :(得分:3)
如果您想要工具栏项的实际弹出按钮,请将NSPopUpButton设置为工具栏项的视图。
在Interface Builder 3.2.1中(我不知道这个功能何时被实际引入),你可以深入到nib窗口中对象的分层列表中的工具栏,然后从中弹出一个弹出按钮。库调色板进入列表中的工具栏。 IB会将按钮包装在工具栏中。
答案 3 :(得分:3)
仅供参考:这篇文章已经结束了,但我只是在浏览,我有一个简单的方法,所以我想我会给出一个答案,万一其他人看一看。我发现无法将弹出按钮直接拖到Interface Builder中的工具栏中。但是,我可以将弹出按钮从窗口拖到工具栏。所以我首先在窗口上创建弹出按钮,然后将其拖动到工具栏......它可以工作!与其他对象相同。
答案 4 :(得分:1)
假设menu
是NSMenu
个对象且sender
是NSToolbarItem
,那么您需要做的就是传递sender.view
以显示菜单。如果您已通过Interface Builder设置NSToolbarItem
,则无需添加其他视图。
[NSMenu popUpContextMenu:menu
withEvent:[NSApp currentEvent]
forView:sender.view];