如何使用 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 以及如何在你的项目中使用这个库?