从 windowDidLoad 启动 ViewController 作为工作表

Posted

技术标签:

【中文标题】从 windowDidLoad 启动 ViewController 作为工作表【英文标题】:Launching ViewController as sheet from windowDidLoad 【发布时间】:2018-05-06 11:50:01 【问题描述】:

我试图在窗口加载后立即将情节提要显示为工作表。

override func windowDidLoad() 
    super.windowDidLoad()
    let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Init"), bundle: nil)
    let controller = storyboard.instantiateInitialController() as! NSViewController
    self.window!.contentViewController?.presentViewControllerAsSheet(controller)

很遗憾,工作表显示在位置不正确且位于窗口后面。 当我在按钮内运行相同的代码时,一切正常。

Screenshot

加载窗口后如何正确显示情节提要表?

【问题讨论】:

我不是 mac 开发人员,但我认为 windowDidLoad 不是显示其他窗口的正确位置。可能您应该等到显示给定窗口后再显示其他窗口,可能在contentViewController 中的viewDidAppear @Sulthan 你说得对,谢谢 - 我在窗口生命周期中使用了错误的函数。在contentViewControllerviewDidAppear 中运行代码确实有效! (如果你将它作为一个发布,我会批准你的 awnser) 然后发布了答案。这只是一个猜测,因为我不了解 MacOS 生态系统。 【参考方案1】:

我对 ios 生态系统有更多了解,但我认为您应该仅在显示原始窗口后才显示新窗口。 windowDidLoad 在视图加载时调用,而不是在视图显示时调用。

因此,您可能应该将您的代码放入viewDidAppearcontentViewController 中。

【讨论】:

以上是关于从 windowDidLoad 启动 ViewController 作为工作表的主要内容,如果未能解决你的问题,请参考以下文章

如何从自定义 UITableViewCell 获取值到 ViewController?

Cocoa NSPopupButton 问题

swift ios - 如何从 AppDelegate 在 ViewController 中运行函数

如何找到推送了哪个 viewController?

为啥窗口背景在全屏时保持黑色?

[macOS]init windows position——方法二:代码实现