什么相当于initWithNibName:在OSX上?

Cri*_*ian 2 macos cocoa objective-c

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

我创建了5个nib文件,每个文件都有不同的窗口,每个笔尖都有类文件.

我该怎么办,当您按下MainMenu.xib上的按钮时,它会打开一个新视图?

我已经看过使用initWithNibName:iOS的,但是无法在Mac上找到它的工作方式.或者我是以错误的方式来做这件事的?如果是这样,您如何使用Xcode管理Mac应用程序中的不同视图和类?

Ver*_*ous 10

因为你提到"我创建了5个nib文件,每个文件都有不同的窗口,每个笔尖都有类文件." 我假设你有5个不同的窗口(不是视图),并希望按下按钮打开它们.

每个窗口nib文件由a控制NSWindowController,它将是MVC中的C. 要以编程方式实际加载nib文件,请为其指定一个NSWindowController; 将NSWindowController在OS X是堪比UIViewControlleriPhone上.

NSWindowController *controller = [[NSWindowController alloc] initWithWindowNibName:@"nib1"]
Run Code Online (Sandbox Code Playgroud)

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

[controller showWindow:nil] 显示窗口

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

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

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

[currentWindow setContentView:[newWindowController.window contentView]];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

您应该阅读Apple在Windows,视图和应用程序上提供的所有文档.

  • 我担心你自己必须做一些研究,这将是一个很好的学习过程.一旦你理解了基础知识,这个问题应该没有问题需要解决. (2认同)