来自NSButton的NSEvent

时间:2017-04-20 13:58:21

标签: objective-c macos cocoa nstableview nsmenu

我有一个NSTableView,每行都包含一个按钮。我还有一个与表相关的菜单。

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

行动方法是:

- (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,则菜单显示在左下角,而不是按钮旁边。

任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

但我建议你根本不使用line-height: 1; 。如果您使用NSPopUpButton,则会在左键单击时在正确的位置显示菜单。