OS X:显示应用程序代理的接口(UIElement)

时间:2012-11-08 19:15:30

标签: macos uielement

如何为“应用程序是代理(UIElement)”设置为“是”的应用程序重新显示?

界面在我第一次启动应用程序时显示,但是如果我关闭窗口,然后单击应用程序的图标,则没有任何反应。我想这是因为OS X正在尝试再次启动应用程序,并且有一些机制阻止了这一点。我想要的是这个:

  • 首次点击应用程序的图标应启动应用程序并显示界面。
  • 如果界面已关闭(但应用程序仍在后台运行),则后续点击图标应该只显示界面。
  • 如果界面已经显示,则单击图标只需将窗口移动到前台。

2 个答案:

答案 0 :(得分:2)

这是一种可以做到的方法:

1)将+ initialize方法添加到您的应用代理

+ (void)initialize
{
    // check if there is a running instance of your app
    NSArray * apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:[[NSBundle mainBundle] bundleIdentifier]];
    if ([apps count] > 1)
    {
        //post notification to it to update inteface
        [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"updateInterface" object:nil];
        //quit current instance of the app, coz you don't need two apps running continiously
        exit(0);
    }
}

2)注册您的应用以获取通知

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(updateInterface:) name:@"updateInterface" object:nil];
}

3)添加updateInterface方法

- (void)updateInterface:(NSNotification *)aNotification
{
    // handle your interface here
    // ....

    // move your app forward
    [NSApp activateIgnoringOtherApps:YES];
}

答案 1 :(得分:2)

我在这里找到答案:Closing Mac application (clicking red cross on top) and reopening by clicking dock icon

- (BOOL)applicationShouldHandleReopen:(NSApplication*)theApplication
    hasVisibleWindows:(BOOL)flag
{
    [self.window makeKeyAndOrderFront:self];
    return YES;
}