如何在 OSX 應用程序中恢復窗口位置? (How to restore window position in an OSX application?)


問題描述

如何在 OSX 應用程序中恢復窗口位置? (How to restore window position in an OSX application?)

我創建了一個故事板,它具有窗口視圖控制器作為初始視圖控制器。我給窗口一個自動保存名稱preferencesWindow。在首選項中,我檢查了 [x] 可恢復和 [x] 關閉時釋放。

當我進入菜單並單擊首選項時,我會像這樣加載窗口控制器:

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

    windowController!.showWindow(self)

這將顯示首選項視圖控制器,當我將其拖動到另一個位置並單擊關閉按鈕它將關閉。到目前為止,一切都很好。但是,當我從菜單中再次加載窗口時,它會顯示在它的原始位置,而不是我上次將窗口拖到的位置。這是為什麼呢?

Answer這似乎是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)

參考解法

方法 1:

This is a bug in Xcode 6 and I don't know if it is fixed in Xcode 7.

Setting autosave in InterfaceBuilder has no effect. To get it to work just set its name in windowDidLoad() of your windowController:

class MyWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        self.windowFrameAutosaveName = "position"
    }    
}

方法 2:

Swift 4:

final class MyWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        self.windowFrameAutosaveName = NSWindow.FrameAutosaveName(rawValue: "myWindow")
    }

}

(by Markzisoftdbrownjave)

參考文件

  1. How to restore window position in an OSX application? (CC BY‑SA 2.5/3.0/4.0)

#autosave #nswindow #swift #macos






相關問題

保存 NSDocument 時收到通知 (Get notified when NSDocument is saved)

忽略差異中的Emacs自動生成的文件 (Ignore Emacs auto-generated files in a diff)

如何在 OSX 應用程序中恢復窗口位置? (How to restore window position in an OSX application?)

使用沒有保存按鈕的 Symfony 爬蟲發送表單(自動保存功能) (send form with Symfony crawler without save button (autosave function))

如何在 NumericTextbox Kendo UI 滾動條中觸發自動保存 (How to trigger autosave in a NumericTextbox Kendo UI Scrollbars)

自動保存草稿的最佳做法? (Best practices for autosaving drafts?)

如何在 iPhone 應用程序上存儲多個帳戶的用戶登錄詳細信息(用戶、密碼) (How to store user Login details(user, pass) for multiple accounts on iPhone app)

從 OSX lion 上的版本瀏覽器恢復不起作用...想法? (Restoring from versions browser on OSX lion not working... ideas?)

是否有visual studio自動保存配置設置? (Is there a visual studio automatic save configuration setting?)

用戶退出應用程序時在 MapKit 中存儲註釋 (Store annotations in MapKit when user quit application)

Umbraco 全部內容自動保存 (Umbraco Whole Content Autosaving)

是否有使用 MVC 架構(asp.net、c#、jquery、ajax)自動保存冗長 Web 表單數據的 API/解決方案 (Is there an API/ solution for Auto-saving data of lengthy web forms using MVC architecture (asp.net,c#,jquery,ajax))







留言討論