阅读 45

macOS开发-如何让用户在点击关闭按钮时退出App:applicationShouldTerminateAfterLastWindowClosed

最近自己盲撸了一个macOS应用,主要是为了方便学生能更高清的看在下的教学视频,摸爬滚打了一两个月终于准备上线了,打包后又出现官方责任的bug了(习惯性崩溃):

用户点击窗口左上角关闭按钮时无法退出App,只是关闭了这个窗口,上面的菜单栏依旧还在,但我再点击程序坞的App图标时也恢复不了窗口(官方所说的默认行为:隐藏App)

我并没有对关闭按钮做自定义,全部采用的是默认行为。

可现在的效果是四不像,也不是关闭App,也不是隐藏App(类似于最小化)

不能容忍。

大海捞针般找啊找啊,最后还是在文档里找到了:

optional func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
复制代码

这是NSApplicationDelegate(App的生命周期相关)的一个方法,可以说很形象了

用法:

在AppDelegate.swift文件里,实现这个方法,返回true即可

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    
    //...
    
    func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
        return true
    }
}
复制代码

效果:

如果现在App仅剩一个窗口,用户按左上角关闭按钮时将退出整个App(等同于command+Q或右击程序坞点退出),符合用户习惯。

ps:如果需要当用户点击关闭按钮隐藏App功能的同学可以留言我。

不知道为什么苹果要多此一举,macOS的世界,寒冬继续。

关注下面的标签,发现更多相似文章
评论