我创建了一个 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/