How can I easily save the Window size and position state using Obj-C?

前端 未结 9 529
灰色年华
灰色年华 2021-02-02 09:19

What is the best way to remember the Windows position between application loads using Obj-C? I am using Interface Builder for the interface, is it possible to do this with bind

相关标签:
9条回答
  • 2021-02-02 09:48

    According to the doc, to save a window's position:

    NSWindow *window = // the window in question
    [[window windowController] setShouldCascadeWindows:NO];      // Tell the controller to not cascade its windows.
    [window setFrameAutosaveName:[window representedFilename]];  // Specify the autosave name for the window.
    
    0 讨论(0)
  • 2021-02-02 09:49

    For me, the following line in -applicationDidFinishLaunching in the app delegate workes fine (under Catalina, macOS 10.15):

      [self.window setFrameAutosaveName: @"NameOfMyApp"];
    

    it is important that this line

      [self.window setDelegate: self];
    

    is executed before setFrameAutosaveName in -applicationDidFinishLaunching !

    0 讨论(0)
  • 2021-02-02 09:50

    In order to restore a window, you can set the Restoration ID in Interface Builder. This will be used as part of the key under which the frame is stored in NSUserDefaults. -- but that didn't (always) work for me.

    NSWindow has setFrameUsingName(_:) etc. to configure this, like @BadmintonCat wrote, and you can serialize the window position manually, too, in case that doesn't work, either.

    The simplest solution in my app though was to use the NSWindowController.windowFrameAutosaveName property and set it to something in awakeFromNib(_:). That single line affected loading and saving successfully.

    0 讨论(0)
提交回复
热议问题