小编tag*_*lia的帖子

popUpMenuPositioningItem:atLocation:inView:切换到另一个应用程序时挂起

我正在开发一个无码头应用程序(LSUIElement真的)。当用户单击相应的NSStatusItem或使用键盘快捷键时,应用程序会弹出一个菜单。

我的问题是,每当用户切换到另一个应用程序(使用 ?-TAB)时,所有以编程方式弹出菜单的方法都会挂起,而没有先关闭菜单。我试过popUpMenuPositioningItem:atLocation:inView:, popUpContextMenu:withEvent:forView:, 以及NSStatusItem( popUpStatusItemMenu:)上的相应方法。

如果用户使用 ESC 键关闭菜单一切正常,但如果用户切换到不同的应用程序,上述方法永远不会返回(它们似乎同步运行并在菜单关闭时返回)。应用程序不会崩溃,并且有一些技巧可以重新获得控制权(调用 exposé,或单击NSStatusItem弹出菜单的任何内容)。

如果应用程序有停靠栏图标(即设置LSUIElement为 false),问题就会消失。

这是使用键盘快捷键时弹出菜单的代码:

[mainMenu popUpMenuPositioningItem:[mainMenu itemAtIndex:0]
                        atLocation:[NSEvent mouseLocation]
                            inView:nil];
Run Code Online (Sandbox Code Playgroud)

NSStatusItem是单击时弹出菜单的代码:

- (void)mouseDown:(NSEvent *)event
{
    [statusItem popUpStatusItemMenu:[statusItem menu]];
}
Run Code Online (Sandbox Code Playgroud)

mouseDown:方法位于NSView附加到NSStatusItem.

关于如何解决这个问题的任何想法?

谢谢你的帮助。

更新

该问题还与正在激活的应用程序有关(我[NSApp activateIgnoringOtherApps:YES];在显示菜单之前使用,或者在某些情况下无法使用键盘导航菜单)。

macos cocoa menu objective-c

2
推荐指数
1
解决办法
1363
查看次数

标签 统计

cocoa ×1

macos ×1

menu ×1

objective-c ×1