繁体   English   中英

如何将弹出菜单添加到NSToolbarItem?

[英]How to add a pop-up menu to a NSToolbarItem?

我正在尝试从NSToolbarItem打开一个弹出菜单。 我尝试了这个例子但是我不能使用那个类方法,因为NSToolbar和NSToolbarItem继承自NSObject而不是NSView。

除了创建自定义视图外,从NSToolbarItem打开弹出菜单的最佳方法是什么?

基本上,你创建类似NSButton东西,它附有一个NSMenu ,然后使用NSToolbarItemsetView:方法将该按钮嵌入到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中的工具栏中。 但是,我可以将弹出按钮从窗口拖到工具栏。 所以我首先在窗口上创建弹出按钮,然后将其拖动到工具栏......它可以工作! 与其他对象相同。

假设menuNSMenu对象而senderNSToolbarItem ,那么您需要做的就是传入sender.view来显示菜单。 如果您已通过Interface Builder设置了NSToolbarItem ,则无需添加其他视图。

[NSMenu popUpContextMenu:menu
               withEvent:[NSApp currentEvent]
                 forView:sender.view];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM