我很惊讶这不会自动发生,但我希望我的应用程序窗口在点击Dock图标时自动打开。
为了澄清一下,当我打开应用程序时,窗口会自动打开,但是当我单击窗口的十字架但让应用程序继续运行时,单击停靠栏图标时窗口将不会打开。
答案 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的一些信息。
的一些信息答案 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中。这解决了无响应的窗口问题。