单击停靠栏图标时如何打开“应用程序”窗口?

时间:2009-05-02 14:10:31

标签: cocoa

我很惊讶这不会自动发生,但我希望我的应用程序窗口在点击Dock图标时自动打开。

为了澄清一下,当我打开应用程序时,窗口会自动打开,但是当我单击窗口的十字架但让应用程序继续运行时,单击停靠栏图标时窗口将不会打开。

6 个答案:

答案 0 :(得分:64)

在您的app委托中实施- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag。查看文档以获取返回值的详细信息。

基于文档的应用和基于非文档的应用的行为略有不同。如果在单击基于文档的应用程序的停靠图标时没有打开窗口,则会创建新文档。如果在单击非基于文档的应用程序的停靠图标时没有打开的窗口,则它将不执行任何操作。

答案 1 :(得分:12)

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{
    if (flag) {
        return NO;
    }
    else
    {
       [YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon
        return YES;
    }
}

答案 2 :(得分:10)

这就是我正在做的事情,一旦关闭后,将基于非文档的应用程序的主窗口返回到屏幕。我知道这可能不是正确的方法,但到目前为止它对我有用。

在AppDelegate上实现了这一点,窗口被定义为同一对象的实例变量。

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    [window makeKeyAndOrderFront:self];
    return NO;
}

如果有人有更好的解决方案,请回复。谢谢!

答案 3 :(得分:4)

当应用程序变为活动状态时,基于文档的应用程序将自动打开新的无标题文档,因此我假设您指的是非基于文档的应用程序。

在应用程序委托中实现applicationDidBecomeActive:方法,然后打开/显示窗口。

编辑:

有关Delegates的一些信息。

有关Opening and Closing WindowsNSWindow API

的一些信息

答案 4 :(得分:3)

正如其他人指出的那样,使用json.getJSONArray("post").get(0).getString("word_en");方法在非文档应用程序中重新打开已关闭的窗口是正确的方法。我想要添加的唯一更改是通过迭代applicationShouldHandleReopen的可见和不可见NSApplication列表并检查所需窗口来更灵活地检查必须重新显示哪个窗口。

.windows

<强>附录

a)如果窗口被隐藏,那么当用户点击应用程序的Dock图标时它将自动显示,因此无需实现func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { if flag == false { for window in sender.windows { if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true { window.makeKeyAndOrderFront(self) } } } return true } 方法。

b)选中“关闭时释放”选项不会以任何方式影响上述行为。

答案 5 :(得分:2)

添加到已接受答案的解决方案:

根据接受的答案,重新打开的窗口不再对鼠标事件做出反应。

使用接受的答案时,您还必须确保取消选中&#34;关闭时释放&#34;在IB窗口的Attributes Inspector中。这解决了无响应的窗口问题。