MacOS SwiftUI, cara mencegah tindakan penutupan jendela

Jadi saya punya aplikasi swiftUI, suatu saat saya membuat NSWindow dan menetapkan contentView, seperti ini:

        // ////////////////////////////////////////////////////////
        // Add token window
        // ////////////////////////////////////////////////////////

        let configurationView = ConfigurationView().environmentObject(store)

        configurationWindow = NSWindow(
            contentRect: NSRect(x:0, y: 0, width: 480, height: 500),
            styleMask: [.titled, .closable, .miniaturizable, .fullSizeContentView],
            backing: .buffered, defer: false
        )
        configurationWindow.center()
        configurationWindow.setFrameAutosaveName("BSchauer")
        let hostingController = NSHostingController(rootView: configurationView)
        configurationWindow.contentViewController = hostingController
        configurationWindow.makeKeyAndOrderFront(nil)
        configurationWindow.setIsVisible(false)
    ... 
   // later on in the code
   @objc func toggleConfigurationWindow() {
        if self.configurationWindow.isVisible {
            self.configurationWindow.setIsVisible(false)
            if let button = self.statusBarItem.button {
                self.popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
            }
        } else {
            self.configurationWindow.setIsVisible(true)

            self.configurationWindow.contentViewController?.view.window?.becomeKey()
        }
    }

Anda melihat bahwa cara saya berinteraksi dengan jendela untuk menyajikannya kepada pengguna adalah melalui bendera yang terlihat, sekarang masalahnya adalah ketika jendela ditampilkan dan ditutup melalui tombol tutup di bilah atas, jendela tersebut entah bagaimana dilepas (?) dan saat berikutnya pengguna mencoba berinteraksi dengan aplikasi dan membuka kembali jendela, saya mendapatkan kesalahan segmentasi.

Salah satu hal yang saya coba adalah alih-alih menyetel visibilitas ke false, cukup membuat ulang jendela, tetapi saya masih mendapatkan kesalahan segmentasi.

Semua jawaban sebelumnya yang saya temukan berhubungan dengan cara lama menangani NSViewController dan mengganti metode windowShouldClose, tapi sepertinya saya tidak bisa membuatnya berfungsi.

TL:DR: Ketika pengguna menekan tombol tutup berwarna merah di jendela, alih-alih jendelanya hancur, saya hanya ingin mengatur visibilitasnya ke false


person Oscar Franco    schedule 19.04.2020    source sumber


Jawaban (1)


Saya membuatnya berfungsi, tidak perlu mengatur contentViewController, Anda dapat menggunakan contentView standar:

configurationWindow.contentView = NSHostingView(rootView: configurationView)

dan untuk menonaktifkan jendela yang dilepaskan saat ditutup:

configurationWindow.isReleasedWhenClosed = false

Saya masih tertarik untuk mengetahui kapan jendela ditutup, untuk mungkin melakukan suatu tindakan setelahnya, tetapi ini masih menyelesaikan masalah saya

person Oscar Franco    schedule 19.04.2020