我在后台应用程序中遇到了一些问题,该应用程序使用 LSUIElement=1 隐藏其停靠项、菜单栏并防止它出现在 Command-Tab 应用程序切换器中。
这似乎是雪豹唯一的问题。
应用程序在菜单栏中放置一个 NSStatusItem 并在单击时弹出一个菜单。选择“首选项...”应该会弹出一个带有首选项的 NSWindow。
似乎不起作用的第一件事是窗口没有在前面排序,而是出现在所有其他应用程序窗口的后面。
我试图通过调用来解决这个问题
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
但这没有用。
过了一会儿,我发现菜单阻止了向运行循环发送消息,所以我在 MainController 上编写了另一个方法并延迟发送消息:
[self performSelector:@selector(setFront:) withObject: [preferencesController window] afterDelay:1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
请注意发送每一个可能的消息以使它做它应该做的方法。
这工作,有点,窗口被带到所有应用程序的所有其他窗口顶部的前面,但大多数时候它是不活动的,这意味着它的标题栏是灰色的。单击标题栏也不会使窗口处于活动状态。单击窗口的内部将使其处于活动状态!?
在 Leopard 中,这一切似乎都不是问题。只需调用 activateIgnoringOtherApps 并使窗口键似乎工作得很好。
在 Snow Leopard 中,有一个新的 API 旨在替换 LSUIElement 以模拟其行为:
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
我已经玩过了,但它只是 SL,我无法设置 LSUIElement。