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

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

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

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

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

@IBOutlet weak var window: NSWindow!

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

【问题讨论】:

    标签: swift xcode macos cocoa 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
    • 如果你的视图窗口不是主窗口怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2017-12-20
    • 2021-04-29
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多