swift - 如何恢复 OSX 应用程序中的窗口位置?

标签 swift macos nswindow autosave

我创建了一个 Storyboard,它有窗口 View Controller 作为初始 View Controller 。我给窗口一个自动保存名称 preferencesWindow。在首选项中,我选中了 [x] Restorable 和 [x] Release when closed。

当我进入菜单并单击首选项时,我会像这样加载窗口 Controller :

    let storyboard          = NSStoryboard(name: "Preferences", bundle: nil)
    let windowController    = storyboard.instantiateInitialController() as? NSWindowController
    let window              = windowController?.window

    windowController!.showWindow(self)

这将显示首选项 View Controller ,当我将其拖动到另一个位置并单击关闭按钮时,它将关闭。到目前为止,一切都很好。但是,当我再次从菜单中加载窗口时,它会显示在它的原始位置,而不是我上次将窗口拖动到的位置。这是为什么?

回答 它似乎是 xCode 7 中的一个错误,在代码中设置自动保存名称解决了它。

    let storyboard          = NSStoryboard(name: "Preferences", bundle: nil)
    let windowController    = storyboard.instantiateInitialController() as? NSWindowController
    let window              = windowController?.window

    window!.setFrameAutosaveName("preferences")
    windowController!.showWindow(self)

最佳答案

这是Xcode 6的bug,不知道Xcode 7有没有修复。

在 InterfaceBuilder 中设置自动保存无效。要让它工作,只需在 windowController 的 windowDidLoad() 中设置它的名称:

class MyWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        self.windowFrameAutosaveName = "position"
    }    
}

关于swift - 如何恢复 OSX 应用程序中的窗口位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33707236/

相关文章:

ios - collectionView分为三行swift 4

swift - 为什么第三次点击按钮时发送消息崩溃?

swift - MacOS 使用 swift 4 更改菜单栏图标

php - 为 MAMP 编译 php 扩展

java - Mac OS X El Capitan 的 JFrame 需要圆角底角

Cocoa获取打开窗口的数量

swift - SplitView 不受图层支持,但尝试使用叠加侧边栏

Xcode 6 测试目标问题

objective-c - N窗口消失

objective-c - 类似 nswindow 级别的 growl 通知