【问题标题】:Open New SwiftUI Window from AppKit NSButton从 AppKit NSButton 打开新的 SwiftUI 窗口
【发布时间】:2023-03-19 00:45:01
【问题描述】:

我想在 AppKit 应用程序内的新窗口弹出窗口中显示 SwiftUI 视图。我目前正在情节提要中执行此操作,方法是将ShowNSButton 转为NSViewController

我正在尝试在这样的代码中执行此操作:

@IBAction func clickTest(_ sender: NSButton) {
  let prefsView = NSHostingController(rootView: PreferencesView())
  self.presentAsModalWindow(prefsView) //I don't know how to do a regular "Show"
}

当我点击按钮时,我知道一个模式正在出现,但它是不可见的。我知道它在那里,因为当我尝试点击我的主应用程序窗口时听到NSBeep 的声音。我还可以在窗口菜单中看到Untitled 窗口。

这里是PreferencesView()

import SwiftUI

struct PreferencesView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

struct PreferencesView_Previews: PreviewProvider {
  static var previews: some View {
    PreferencesView()
  }
}

我还需要做些什么来让一个带有我的 SwiftUI 视图的窗口出现在其中吗?

【问题讨论】:

    标签: swiftui appkit


    【解决方案1】:

    我想通了。它需要 AppKit 的一点帮助。您必须创建一个新的 NSWindowController 并使用它来容纳您的 SwiftUI 视图 (NSHostingController):

    @IBAction func clickTest(_ sender: NSButton) {
      //SwiftUI wrapper
      let hostingController = NSHostingController(rootView: PreferencesView())
    
      //New window holding our SwiftUI view
      let window = NSWindow(contentViewController: hostingController)
      window.setContentSize(NSSize(width: 380, height: 400))
      
      //Create a new window controller and show the window   
      let controller = NSWindowController(window: window)
      controller.showWindow(nil)
    }
    

    如果有人知道更好的方法,我会全力以赴。 :)

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2014-07-20
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多