macCatalyst应用程序:如何在不终止应用程序的情况下关闭窗口?

我正在使用maccatalyst开发应用程序。

当用户关闭Mac版本的窗口时,该应用程序将终止。

可以使用以下方法更改可可粉中的这种行为:

applicationShouldTerminateAfterLastWindowClosed

方法或通过将plist文件中的NSSupportsAutomaticTermination设置为NO。

如何在maccatalyst应用中获得相同的信息?

ezeke123 回答:macCatalyst应用程序:如何在不终止应用程序的情况下关闭窗口?

我已经与Apple技术开发人员支持讨论了该问题。经过长时间的讨论,他们接受了苹果方面的错误。已上报给工程团队。

更新: Apple工程团队提供了有关此问题的以下信息,它对我有用:

我们通过在info.plist中添加NSSupportsAutomaticTermination = NO来防止退出行为

,

编辑

此答案无效,请参阅注释。

编辑结束

仅当您激活“支持多个窗口”时,这才可能:

enter image description here

我的想法,为什么会这样:macOS区分应用程序和Windows。因此,如果您的应用程序只能打开一个窗口,则关闭该窗口将通知macOS关闭该应用程序。

PS:我在“支持多个窗口”模式下遇到了一些错误。我希望很快将其删除。

,

这是我的解决方案,也许有人还在寻找这个:)

首先,我们需要访问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

顺便说一句,我假设我们还有一个状态栏图标,它将作为应用程序的锚点。

本文链接:https://www.f2er.com/2554976.html

大家都在问