【问题标题】:How to programmatically open the app window from the background in SwiftUI on macOS (not iOS)?如何以编程方式在 macOS(不是 iOS)上的 SwiftUI 中从后台打开应用程序窗口?
【发布时间】:2019-10-14 18:50:17
【问题描述】:

我有一个非常简单的 SwiftUI 应用程序,它在菜单栏中运行,并且应该从后台的重复计时器中定期打开一个应用程序窗口(整个应用程序中只有一个窗口/视图)。

如何从代码中实际打开应用程序窗口?

这是一个简化的 AppDelegate.swift 示例,展示了我正在尝试做的事情:

import Cocoa
import SwiftUI

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {  
    var window: NSWindow!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Create the SwiftUI view that provides the window contents.
        let contentView = ContentView()

        // Create the window and set the content view. 
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.center()
        window.setFrameAutosaveName("Main Window")
        window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)

        var loop = 0
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
            loop+=1
            if (loop % 10 == 0) {
                // TODO: How to close the window?
            } else {
                // TODO: How to reopen the window?
            }
        }
    }
}

【问题讨论】:

  • @valosip 这似乎是一个完全不同的问题,这个问题是关于 iOS 而不是 macOS。示例:UIWindow 与 macOS 无关。
  • 已删除,错过了macos部分。

标签: swift swiftui


【解决方案1】:

一种方法是隐藏/取消隐藏应用程序本身

func applicationDidFinishLaunching(_ aNotification: Notification) {
    //setup of window etc ...

    Timer.scheduledTimer(withTimeInterval: 3, repeats: true, block: { _ in
        if self.window.isVisible {
            NSApp.hide(self)
        } else {
            NSApp.unhide(self)
        }
    })
}

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 2016-05-29
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多