我似乎与this question on stopping dock bounce.
有完全相反的问题我无法让我的应用程序不断反弹停靠图标!
我也讨厌不断弹跳停靠图标,但在这种情况下,如果用户没有意识到我的应用程序无法启动,他们可能会浪费数小时的时间来跟踪数据。
这是我在应用程序中委托applicationWillFinishLaunching:方法的代码。
if (!AXAPIEnabled()) { // I'm checking that Accessibility is turned on
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert setMessageText:@"Lapsus cannot run."];
[alert addButtonWithTitle:@"Open Accessibility Prefs..."];
[alert addButtonWithTitle:@"Quit"];
[alert setInformativeText:@"Lapsus needs \"Enable access for assistive devices\" in the Accessibility pane of System Preferences to be turned on."];
[NSApp activateIgnoringOtherApps:YES];
int attentionrequest = [NSApp requestUserAttention:NSCriticalRequest];
NSInteger returnValue = [alert runModal];
....
[NSApp cancelUserAttentionRequest:attentionrequest];
}
我已尝试删除requestUserAttention行。
我已经尝试将requestUserAttention行放在很多不同的地方:直接在runModal调用之前,首先是等等。
我已尝试删除activateIgnoringOtherApps行。
无论我做什么,停靠栏图标都会反弹一次然后停止。
用户可能会看到我的应用程序,因为我将它带到前面,但如果他们在正确的时间点击,他们的活动应用程序可能会隐藏重要的错误消息。
所以我想要一些东西,即使他们的码头被隐藏,他们也知道一些不对的东西。
我在Mac OS X 10.5 Leopard上构建它。关于我做错了什么的任何想法?或者Leopard是否不再支持不断弹跳停靠图标了?
更新
我将方法调用放在applicationWillFinishLaunching:
中只要我将它放入applicationDidFinishLaunching:中,并删除了activateIgnoringOtherApps:call,它就会按要求运行。
然而,我的问题仍然是“我可以把我的应用程序带到前面以及弹出停靠栏图标吗?从第一个回答看起来似乎没有,虽然我不确定我理解为什么。”
更新
我不明白为什么,因为我没有想到它。现在已经向我指出,窃取焦点意味着码头得到了它想要的东西,它是完全合理的。
结论
如果您希望用户注意,请不要使用[NSApp activateIgnoringOtherApps:YES];
答案 0 :(得分:2)
如果您发送activateIgnoringOtherApps,那么您基本上会解雇您自己的通知。