如何使用Obj-C轻松保存窗口大小和位置状态?

Luk*_*uke 19 macos cocoa objective-c

使用Obj-C记住应用程序加载之间的Windows位置的最佳方法是什么?我正在使用Interface Builder作为接口,是否可以使用绑定来完成此操作.

推荐的方法是什么?谢谢.

Nic*_*rge 32

在Interface Builder中的Attributes下的Autosave字段中输入该窗口唯一的名称(例如"MainWindow"或"PrefsWindow").然后,它会自动将其位置保存在"用户默认值"中.

要以编程方式设置自动保存名称,请使用-setFrameAutosaveName:.如果您有基于文档的应用程序或在IB中设置自动保存名称没有意义的其他情况,您可能希望这样做.

链接到文档.

  • 如果您使用的是NSWindowController,请不要使用Interface Builder autoSaveName字段.见Gon的答案如下.特别是在窗口控制器的`-windowDidLoad`方法中,调用:`[super windowDidLoad];``[self setShouldCascadeWindows:NO];``[self setWindowFrameAutosaveName:@"MyWindowAutosaveName"];` (8认同)

Bad*_*Cat 13

在Swift中:

class MainWindowController : NSWindowController {
    override func windowDidLoad() {
        shouldCascadeWindows = false
        window?.setFrameAutosaveName("MainWindow")

        super.windowDidLoad()
    }
Run Code Online (Sandbox Code Playgroud)


Gon*_*Gon 6

根据文档,保存一个窗口的位置:

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.
Run Code Online (Sandbox Code Playgroud)