按住上下文菜单(NSMenu)。单击窗口上的任意位置时,不允许关闭上下文菜单

Neh*_*eha 6 macos cocoa contextmenu objective-c

我在我的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];
}
Run Code Online (Sandbox Code Playgroud)

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

我尝试通过覆盖窗口的mouse down事件并在上下文菜单打开时不发送[super mousedown:event]调用来完成此操作。这没有用。

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

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

但是没有任何东西对我有用。

有什么办法可以做到这一点。请指出正确的方向。我将不胜感激。谢谢。

lea*_*lin 0

您是否尝试过对 NSMenu 进行子类化并覆盖

- (void)cancelTracking;
- (void)cancelTrackingWithoutAnimation;
Run Code Online (Sandbox Code Playgroud)

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