如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口

Posted

技术标签:

【中文标题】如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口【英文标题】:How do you reference the view's window in Swift 3.x using Storyboards/Cocoa 【发布时间】:2017-04-15 13:05:02 【问题描述】:

随着 Xcode 和 Swift 中的所有变化,我无法弄清楚如何像在使用 XIB 的项目中那样处理 stotyboard 驱动的项目中的视图窗口。 macOS 编程新手,如果这是基本内容,请提前道歉:

当使用情节提要时,我如何改变视图的窗口状态,例如:

window.titleVisibility = .hidden
window.setContentSize(size)

在一个 xib 驱动的项目中,我正在使用

@IBOutlet weak var window: NSWindow!

但这似乎与情节提要不同。我如何使用故事板做同样的事情?任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

您可以通过访问其窗口属性来获取您的视图窗口的引用。请注意,它不能在视图中完成,但您可以使用惰性初始化器为视图控制器创建一个窗口属性:

lazy var window: NSWindow! = self.view.window

您可以在 viewWillAppear 方法中进行窗口自定义:

import Cocoa


class ViewController: NSViewController 

    lazy var window: NSWindow! = self.view.window

    override func viewWillAppear() 
        super.viewWillAppear()
        window.titleVisibility = .hidden
    

【讨论】:

如果我执行上述操作,然后在 viewDidLoad() 中使用 window.titleVisibility = .hidden,应用程序会崩溃,但它在 viewWillAppear() 中有效。有更好的地方吗? mainwindow.titleVisibility = .hidden 错了window.titleVisibility = .hidden 您是否按原样尝试了我的代码?更好的地方是什么意思?在 viewDidLoad 里面是不能完成的。 view.window 属性将始终返回 nil 我在我的应用程序中重命名了它,抱歉。改回来了。有效,再次感谢!只是想知道 viewWillAppear 是否是一个拥有它的好地方:)【参考方案2】:

这似乎有效:

if let window = NSApplication.shared().mainWindow 
    window.titleVisibility = .hidden

这是一个好的方法吗?

【讨论】:

只需在 viewWillAppear 方法中添加view.window?.titleVisibility = .hidden 如果你的视图窗口不是主窗口怎么办?

以上是关于如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何在你的库中使用 Spring-Data 以及如何在你的项目中使用这个库?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在发布管道中使用输出变量

如何在Hive&Impala中使用UDF

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]