SwiftUI:当窗口关闭macOS时运行代码

伊法

我已经以传统方式打开了窗口,但是我想通过单击关闭框(红色按钮)在关闭窗口时运行一些代码。有这样做的好方法吗?

func openMyWindow()
{
    myWindow = (NSWindow(
    contentRect: NSRect(x: 100, y: 100, width: 100, height: 600),
    styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
        backing: .buffered, defer: false))
    myWindow!.contentView = NSHostingView(rootView: MyWindowView())
        myWindow!.makeKeyAndOrderFront(nil)
}
达维杰夫

很好的问题..不久前我也为此感到挣扎。

您可以使AppDelegate或类符合NSWindowDelegate协议。

然后将窗口的委托传递给self

myWindow.delegate = self

并实现以下功能通过关闭动作通知

func windowShouldClose(_ sender: NSWindow) -> Bool
{}

编辑:

使用SwiftUI生命周期时,可以添加AppDelegate。您也可以实现自己的WindowManager类。这是一个例子:

class WindowManager : NSObject, NSWindowDelegate {
    var popUpWindow : NSWindow? = nil
    
    override init() {}
    
    func openMyWindow()
    {
        popUpWindow = (NSWindow(
        contentRect: NSRect(x: 100, y: 100, width: 100, height: 600),
        styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false))
        popUpWindow!.contentView = NSHostingView(rootView: PopUpView())
        popUpWindow!.makeKeyAndOrderFront(nil)
        popUpWindow?.delegate = self
    }
    
    func windowShouldClose(_ sender: NSWindow) -> Bool
    {
        print("Window will close")
        return true
    }
}

struct PopUpView : View {
    var body: some View {
        Text("This is a new popup view")
    }
}

在您的类中创建并保存该类,struct _: App然后通过此Manager打开Windows。

@main
struct macSwiftUICycleApp: App {
    let persistenceController = PersistenceController.shared

    let windowManager : WindowManager = WindowManager() //<< Here keep the instance of your WindowManager
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, persistenceController.container.viewContext)
                .onAppear {
                    windowManager.openMyWindow() //<< Just a test to open another window on startup
                }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

应用关闭时运行的代码

来自分类Dev

在程序关闭和PC关闭时运行的代码

来自分类Dev

仅当标签/窗口实际关闭时运行功能

来自分类Dev

Swift-用户关闭UIReferenceLibraryViewController时运行代码

来自分类Dev

在应用程序关闭时运行“终止”代码

来自分类Dev

关闭Python守护程序时运行代码

来自分类Dev

按下不同窗口中的按钮时运行代码

来自分类Dev

SwiftUI:在macOS上关闭打开的窗口会导致崩溃

来自分类Dev

即时运行代码

来自分类Dev

在按下按钮时,SwiftUI会定期运行代码;在点击时运行不同的代码?

来自分类Dev

关闭时运行脚本

来自分类Dev

按住按钮时运行代码

来自分类Dev

每小时运行代码

来自分类Dev

在SwiftUI didSet函数中更改DatePicker中的日期时运行代码?

来自分类Dev

在Firefox无需重启的加载项中,如何在打开新窗口(监听窗口打开)时运行代码?

来自分类Dev

适用于macOS应用程序的SwiftUI:关闭窗口并打开另一个窗口时用户@EnvironmentObject

来自分类Dev

打开预览窗口时运行vim命令

来自分类Dev

打开预览窗口时运行vim命令

来自分类Dev

代码::块查找窗口关闭

来自分类Dev

代码::块查找窗口关闭

来自分类Dev

用户“擦除” viewpager片段时运行代码?

来自分类Dev

每次页面加载时运行代码

来自分类Dev

仅在找到对象时运行代码块

来自分类Dev

Javascript代码仅在调试时运行

来自分类Dev

mongoengine加载文档时运行代码

来自分类Dev

NSMutableArray修改时运行代码

来自分类Dev

在课程开始时运行代码

来自分类Dev

当岐阜完成动画时运行代码

来自分类Dev

在等待时运行其他代码

Related 相关文章

热门标签

归档