macos - 在 OSX 上重新打开窗口的正确方法是什么?

标签 macos cocoa nswindow nsapplication

我有一个在 Xcode 中创建的应用程序。它不是基于文档的。

如何才能使当用户单击停靠图标时,窗口重新打开?我正在用 Xcode 自动给我的 Nib 创建所有内容。

我尝试实现 applicationShouldOpenUntitledFile: 并在应用程序委托(delegate)的 window 属性上调用 makeKeyAndVisible,但这会与应用程序的图标混淆。 (我猜这与用作文档预览的图标有关。)

无论如何,我在谷歌上搜索了一下,大部分找到了对 Carbon API 或基于文档的应用程序的引用。

窗口创建过程如何在 NSApplicationMain 和我的应用程序的 nib 文件之间工作,如何复制该过程,以及在哪里可以这样做?

最佳答案

一般来说,我发现与 NSWindowControllers 一起工作使处理窗口变得更加简单。在您的情况下,您的应用程序委托(delegate)不会直接拥有该窗口,而是拥有 NSWindowController拥有该窗口。

为此,您需要创建一个新的 NSWindowController子类(带有用于用户界面的 xib),并将窗口从 MainMenu.xib 迁移到新的 WindowController.xib。把事情搞定,然后就可以开始了。 (另外,请确保窗口上的“启动时可见”复选框未选中)

从您的应用程序委托(delegate)中,您只需创建一个窗口 Controller 的新实例(无论是通过编程方式还是通过 MainMenu.xib 都没关系),并告诉它 -showWindow:当您希望窗口显示(或成为关键)时,并且 -close当你想让它消失时。

对于响应单击 Dock 图标,<NSApplicationDelegate>您正在寻找的方法是 -applicationShouldHandleReopen:hasVisibleWindows: .

关于macos - 在 OSX 上重新打开窗口的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985532/

相关文章:

cocoa - Swift - 选择文件时发出警告(Cocoa)

objective-c - NSPopover 中的 NSTextField 在鼠标单击之前不是关键

macos - PS1 中的什么导致我的 Terminal.app 命令卡在屏幕上?

python - 尝试在 Mac OS X Lion 中安装 pip 时出现权限被拒绝错误

使用 Apple 的 GCD 创建 future

ios - 删除查询结果 tvOS 上的内联搜索

objective-c - NSCalibrateBlackColorSpace 的未弃用替代品?

objective-c - 在 macOS 上获取 CPU 使用百分比

cocoa - 禁用窗口拉伸(stretch) Cocoa?

objective-c - 为什么 NSWindow 的 contentView 属性是类型 id?