2017-04-20 93 views
0

我有一个NSTableView,每一行都包含一个按钮。我也有一个与表格相关的菜单。来自NSButton的NSEvent

问题是:我想单击按钮显示菜单。如果可能的话,不要显示在右键单击。

的操作方法是:

- (IBAction)showMenu:(NSButton *)button { 
    NSLog(@"show menu"); 
    NSMenu *menu = [self.tableView menu]; 
    NSEvent *event = [[NSEvent alloc] init]; 


    [NSMenu popUpContextMenu:menu 
        withEvent:event 
        forView:button]; 

} 

这里做什么用event呢?如果我使用nil,则菜单显示在左下角,而不是按钮旁边。

任何指导,将不胜感激。

+0

您可以获取当前事件:'[NSApp currentEvent]'。考虑在下拉模式下使用'NSPopupButton'。 – Willeke

回答

0

您可以尝试使用-[NSMenu popUpMenuPositioningItem:atLocation:inView:]。该方法不需要参数NSEvent。相反,您在视图的坐标系中给它一个视图和一个位置,菜单将自己定位(或其中一个项目)在该位置。

但我建议你根本不要使用NSButton。如果您改为使用NSPopUpButton,则会在左键单击时在正确的位置显示菜单。

+0

感谢罗布,我的要求是使用我不能改变的NSButton(UI)设计。不过,我已经达到了非常类似你所提到的。 (IBAction)showMenu :(NSButton *)按钮{} {NSMenu * menu = self.tableView.menu; NSPoint point = NSMakePoint(-menu.size.width,0); [menu popUpMenuPositioningItem:[menu itemAtIndex:0] atLocation:point inView:button]; }' –