【问题标题】:Present modal from NSWindowController without using Storyboards在不使用 Storyboard 的情况下从 NSWindowController 呈现模式
【发布时间】:2019-04-07 16:02:52
【问题描述】:

我构建了一个在登录过程开始时运行的 macOS 框架,我想在窗口中向用户显示一些信息。我有一个带有 .XIB 文件的 NSWindowController,它是我框架的主窗口。

我想向另一个视图添加更多 presentAsSheet。为此,我创建了一个带有 .XIB 的 NSViewController 来定义我想在模式中呈现的用户界面,但在这里我完全被阻止了,因为获取窗口的 contentViewController 始终为零

我正在像这样初始化我的主窗口:

func run() {
  NSApp.activate(ignoringOtherApps: true)
  mainWC = MainWC(windowNibName: "MainWC")
  guard mainWC.window != nil else {
    return
  }
  NSApp.runModal(for: mainWC.window!)
}

我试图在哪里展示另一个 NSViewController"

self.window?.contentViewController?.presentAsSheet(customViewController)

在我的 MainWindowController 中,我正在这样做:

@IBAction func btnAction(_ sender: Any) {
  let customModal = CustomModal(windowNibName: "CustomModal")
  self.window?.beginSheet(customModal.window!, completionHandler: { code in
    print(message: "Clicked")
  })
}

模态永远不会出现

【问题讨论】:

    标签: swift xib nsviewcontroller nswindowcontroller


    【解决方案1】:

    在加载窗口和内容视图之前,您无法呈现视图

    windowDidLoad()的窗口控制器内部

    override func windowDidLoad() {
        super.windowDidLoad()
        // present the view
    }
    

    甚至在视图控制器的viewDidLoad

    override func viewDidLoad() {
        super.viewDidLoad()
        // present the view
    }
    

    【讨论】:

    • @AlexGonzalez 想知道你是否解决了这个问题。我面临着类似的问题。我正在为 macOS 构建一个授权插件。我无法在 NSWindow 中加载 NSViewController。
    • @iBuilt 你找到解决办法了吗?
    • @AlexGonzalez 是的,我做到了。我在一个方法中初始化 ViewController。我将 ViewController 对象设置为类中的全局变量,并在 viewDidLoad 方法中对其进行了初始化,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多