我很惊讶这不会自动发生,但我希望我的应用程序窗口在单击Dock图标时自动打开.
只是为了澄清一下,当我打开应用程序时,窗口会自动打开,但当我单击窗口的十字架但让应用程序继续运行时,单击停靠图标时窗口将不会打开.
Ben*_*hen 65
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag在您的应用委托中实施.检查文档以获取返回值的详细信息.
基于文档的应用程序和基于非文档的应用程序的行为略有不同.如果在单击基于文档的应用程序的停靠图标时没有打开窗口,则会创建新文档.如果在单击非基于文档的应用程序的停靠图标时没有打开的窗口,则它将不执行任何操作.
Dip*_*ara 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;
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*llo 10
这就是我正在做的事情,一旦关闭后,将基于非文档的应用程序的主窗口返回到屏幕.我知道这可能不是正确的方法,但它到目前为止对我有用.
在AppDelegate上实现了这个,窗口被定义为同一个对象的实例变量.
- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender
{
[window makeKeyAndOrderFront:self];
return NO;
}
Run Code Online (Sandbox Code Playgroud)
如果有人有更好的解决方案,请回复.谢谢!
正如其他人指出的那样,使用applicationShouldHandleReopen方法在非文档应用程序中重新打开关闭的窗口是正确的方法。我想添加的唯一更改是一种更灵活的方法来检查必须重新显示的窗口,方法是遍历NSApplication的可见和不可见列表.windows并检查所需的窗口。
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
}
Run Code Online (Sandbox Code Playgroud)
附录
a) 如果窗口是隐藏的,那么当用户点击应用程序的 Dock 图标时它会自动显示,所以不需要实现applicationShouldHandleReopen方法。
b) 选中“关闭时释放”选项不会以任何方式影响上述行为。