【问题标题】:Hold a context menu (NSMenu). Don't allow context menu to close when clicked anywhere on window按住上下文菜单 (NSMenu)。单击窗口上的任何位置时不允许关闭上下文菜单
【发布时间】:2013-11-06 08:22:15
【问题描述】:

我在我的 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];
}

但没有什么对我有用。

有没有办法做到这一点。请指出我正确的方向。 我会很感激任何帮助。谢谢。

【问题讨论】:

    标签: objective-c macos cocoa contextmenu


    【解决方案1】:

    您是否尝试过继承 NSMenu 并覆盖

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

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

    【讨论】:

    • 嗨,我尝试覆盖 NSMenu 的这些方法,但它们从未被调用。
    • 另外根据 NSMenu 文档,cancelTracking 所做的是“关闭菜单并结束所有菜单跟踪”。这不是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2011-10-13
    相关资源
    最近更新 更多