我有一个NSMenu飞出使用popUpStatusItemMenu的NSStatusItem的。 这些NSMenuItems显示一串不同链接的,并且每一个与连接的setAction:到OpenLink的:一个目标的方法。 很长一段时间这样的安排一直工作正常。 用户选择从菜单和OpenLink的链接:那么方法处理它。
不幸的是,我最近决定使用NSMenuItem的的setView实验:方法来提供一个更好的/雨衣接口。 基本上,我刚停下设置标题,创建NSMenuItem,然后使用的setView:显示自定义视图。 这完美的作品,菜单项很好看,显示我的自定义视图。
但是,当用户选择一个菜单项,然后松开鼠标,动作不再有效(即,OpenLink公司:不叫)。 如果我只是单纯地注释掉的setView:打电话,然后再行动工作(当然,菜单项是空白,但得到正确执行操作)。 我的第一个问题,那么,这就是为什么设置视图打破了NSMenuItem的行动。
没问题,我想,我会在我的自定义视图检测mouseUp事件,并从那里打电话给我的操作方法解决它。 我加入这个方法我的自定义视图:
- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"in mouseUp");
}
没有骰子! 这种方法不会被调用。
我可以设置跟踪rects和接收的mouseEntered:事件,虽然。 我把我的常规的mouseEntered几个测试,如下所示:
if ([[self window] ignoresMouseEvents]) { NSLog(@"ignoring mouse events"); }
else { NSLog(@"not ignoring mouse events"); }
if ([[self window] canBecomeKeyWindow]) { dNSLog((@"canBecomeKeyWindow")); }
else { NSLog(@"not canBecomeKeyWindow"); }
if ([[self window] isKeyWindow]) { dNSLog((@"isKeyWindow")); }
else { NSLog(@"not isKeyWindow"); }
并得到了以下对策:
not ignoring mouse events
canBecomeKeyWindow
not isKeyWindow
这是什么问题? “不isKeyWindow”? 大概是因为苹果的文件说这是不好的“如果用户点击一个观点,即不在关键窗口,默认情况下被带到窗口推进,取得了关键,但鼠标事件时,不会调度。” 但是,必须有一种方法做检测这些事件。 怎么样?
添加:
[[self window] makeKeyWindow];
有没有效果,尽管canBecomeKeyWindow是YES。