我正在使用macCatalyst开发应用程序。
当用户关闭Mac版本的窗口时,该应用程序将终止。
可以使用以下方法更改可可粉中的这种行为:
applicationShouldTerminateAfterLastWindowClosed
方法或通过将plist文件中的NSSupportsAutomaticTermination设置为NO。
如何在macCatalyst应用中获得相同的信息?
答案 0 :(得分:2)
我已经与Apple技术开发人员支持讨论了该问题。经过长时间的讨论,他们接受了苹果方面的错误。已上报给工程团队。
更新: Apple工程团队提供了有关此问题的以下信息,它对我有用:
我们通过在info.plist中添加NSSupportsAutomaticTermination = NO来防止退出行为
答案 1 :(得分:1)
编辑
编辑结束
仅当您激活“支持多个窗口”时,这才可能:
我的想法,为什么会这样:macOS区分应用程序和Windows。因此,如果您的应用程序只能打开一个窗口,则关闭该窗口将通知macOS关闭该应用程序。
PS:我在“支持多个窗口”模式下遇到了一些错误。我希望很快将其删除。
答案 2 :(得分:0)
这是我的解决方案,也许有人还在寻找这个:)
首先,我们需要访问AppKit。在此链接中,您可以找到有关如何执行此操作的很好的解释,并可以在下一步中进行一些偷窥。 link
一旦我们准备好一个AppKit捆绑包,并阅读了如何禁用窗口上的缩放按钮(在上面的链接上)的说明,我们就可以做我们想要做的事情了;这是为了避免单击“关闭”按钮时终止应用程序。为此,我们只需劫持“关闭”按钮,并告诉它执行我们需要的操作...
- (void) tweakWindowButtons
{
NSArray *windows = NSApplication.sharedApplication.windows;
NSWindowCollectionBehavior behavior = NSWindowCollectionBehaviorFullScreenAuxiliary | NSWindowCollectionBehaviorFullScreenNone;
for (NSWindow *window in windows) {
[window setCollectionBehavior:behavior];
//-- Hijack close button action
NSButton *button = [window standardWindowButton:NSWindowCloseButton];
[button setTarget:self];
[button setAction:@selector(closeButtonAction)];
button = [window standardWindowButton:NSWindowZoomButton];
[button setEnabled:NO];
}
}
- (void) closeButtonAction
{
NSApplicationActivationPolicy policy = NSApplicationActivationPolicyAccessory;
//-- hide app icon and window
NSApplication.sharedApplication.activationPolicy = policy;
}
}
要恢复视图,请将策略设置为NSApplicationActivationPolicyRegular
顺便说一句,我假设我们还有一个状态栏图标,它将作为应用程序的锚点。