保持上下文菜单(NSMenu)。单击窗口上的任何位置时,不允许关闭上下文菜单

时间:2013-11-06 08:22:16

标签: objective-c macos cocoa contextmenu

我在NSTextField中右键单击显示上下文菜单。我使用以下代码在我的NSTextField的rightMouseDown事件中弹出上下文菜单:

- (void) rightMouseDown:(NSEvent*)theEvent
{
  NSMenu* theMenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"];

  [theMenu insertItemWithTitle:@"Suggest Link/Movie" action:@selector(openSuggestionMovieLink) keyEquivalent:@"" atIndex:0];
  [theMenu setDelegate:self];

  [NSMenu popUpContextMenu:theMenu withEvent:theEvent forView:self];
}

当用户点击窗口上的任意位置时,我需要停止关闭此上下文菜单。

我尝试通过覆盖窗口的鼠标按下事件并且在上下文菜单打开时不在其中发送[super mousedown:event]调用来尝试相同的操作。这没用。

此外,我尝试使用NSMenu委托方法menuDidClose:并再次打开其中的菜单。

- (void)menuDidClose:(NSMenu *)menu
{
   NSLog(@"close");
   [NSMenu popUpContextMenu:menu withEvent:nil forView:self];
}

但没有什么对我有用。

有没有办法做同样的事情。请指出我正确的方向。 我会感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您是否尝试过继承NSMenu并重写

- (void)cancelTracking;
- (void)cancelTrackingWithoutAnimation;

修改以适应您的自定义行为?会发生什么?