objective-c - initWithNibName : on OSX? 相当于什么

标签 objective-c macos cocoa

我正在创建一个测试应用程序,尝试在 Mac 上使用 MVC。

我创建了 5 个 nib 文件,每个文件都有不同的窗口,以及每个 nib 的类文件。

我该怎么做才能在按下 MainMenu.xib 上的按钮时打开一个新 View ?

我见过在 iOS 上使用 initWithNibName:,但找不到它在 Mac 上的工作原理。或者我以错误的方式处理这个问题?如果是这样,如何使用 Xcode 管理 Mac 应用程序中的不同 View 和类?

最佳答案

因为你提到“我创建了 5 个 nib 文件,每个文件都有不同的窗口,每个 nib 都有类文件。”我假设您有 5 个不同的窗口(不是 View )并希望在按下按钮时打开它们。

每个窗口 nib 文件都由 NSWindowController 控制,它是 MVC 中的 C。要实际加载 nib 文件(以编程方式),您可以为其分配一个 NSWindowController ; OS X 中的 NSWindowController 与 iPhone 上的 UIViewController 相当。

NSWindowController *controller = [[NSWindowController alloc] initWithWindowNibName:@"nib1"]

然后你可以打开/关闭 NSWindowController 管理的窗口。

[controller showWindow:nil] 显示窗口

[controller.window makeKeyAndOrderFront:self] 使窗口成为关键窗口。

不过,您可能打算做其他事情,即保留相同的窗口,但切换该窗口的内容 View 。在这种情况下,您需要包含 View (并使用 NSViewControllers 加载它们)的 nib 文件,而不是窗口(因为拥有窗口是多余的)。

但即使你坚持使用 Windows,也要替换 contentView:

[currentWindow setContentView:[newWindowController.window contentView]];
<小时/>

enter image description here

enter image description here

enter image description here

enter image description here

您应该阅读 Apple 提供的有关 Windows、 View 和应用程序的所有文档。

关于objective-c - initWithNibName : on OSX? 相当于什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165078/

相关文章:

objective-c - 如何在 Objective-C 中将击键发送到另一个进程

ios - 当应用程序因 SIGSEGV 崩溃时执行最后一次 TFLog

macos - 如何从mac终端打开一个窗口

objective-c - AVFoundation 文档代码

macos - 有没有办法在 NSWindow 上获得 NSPanel “Non activating” 样式功能?

iphone - 需要有关 iPhone 上的动画的帮助

iphone - iOS JSON 数组和 MapKit

ios - 图层 <MetalLayer : 0x28218ed50> Slows Down UITableView Reloading 的可绘制为零

css - 带 CSS 显示的元素 : none; breaking layout - causing misalignment

macos - setNeedsDisplay 不够快(正确的方法是什么?)