【问题标题】:Custom view in NSMenuItem disables the NSPopUpButton selectionNSMenuItem 中的自定义视图禁用 NSPopUpButton 选择
【发布时间】:2012-01-13 14:11:15
【问题描述】:

我想自定义一个NSPopUpButton,所以我实现了一个CustomMenuItemView,它现在只有以下代码(用于测试目的):

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] set];
    NSRectFill(dirtyRect);
}

现在,对于我添加到myPopUpButton.menu 中的NSMenu 的每个NSMenuItem,我将视图设置为我的自定义视图:

NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Some title" action:NULL keyEquivalent:@""];
menuItem.view = [[CustomMenuItemView alloc] initWithFrame:NSMakeRect(0, 0, 100, 25)];

当我运行我的程序并打开弹出按钮时,菜单项选择似乎被禁用(即当我点击它时没有任何反应)。

我猜它实际上并没有被禁用;它只是不再响应事件。我是否需要在自定义视图中添加一些事件处理?如果有,怎么做?

【问题讨论】:

标签: objective-c cocoa nsview nsmenuitem nspopupbutton


【解决方案1】:

我通过将mouseUp 方法添加到我的CustomMenuItemView 解决了这个问题:

- (void)mouseUp:(NSEvent*) event
{
    NSMenu *menu = self.enclosingMenuItem.menu;
    [menu cancelTracking];
    [menu performActionForItemAtIndex:[menu indexOfItem:self.enclosingMenuItem]];
}

【讨论】:

  • 几年后我也遇到了同样的问题。您的解决方案只处理鼠标点击,但我也在尝试处理键盘导航。按 Enter/Return 或 Space 选择突出显示的菜单项并关闭菜单,但不发送任何操作。覆盖-keyUp: 不起作用,您有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2011-08-10
  • 2011-06-23
  • 2011-05-30
相关资源
最近更新 更多