gpt4 book ai didi

cocoa - 将 cocoa 粒放入 cocoa 中

转载 作者:行者123 更新时间:2023-12-03 16:24:52 25 4
gpt4 key购买 nike

如何在另一个窗口中加载 Nib ?

我尝试了 initWithWindowName,

if (mmController == NULL)
mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"];
[mmController showWindow:self];

但它会打开一个新窗口。

我也尝试过loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self];

它成功了,但是当我尝试使用相同的方法返回主菜单时,

[NSBundle loadNibNamed:@"mainMenu" owner:self];

这不起作用。它根本没有任何作用...有什么想法吗?

最佳答案

I tried initWithWindowName,

您的意思是 initWithWindow¹Nib²Name³:,它采用包含窗口 (1) 的 Nib (2) 的名称 (3)。

if (mmController == NULL)

这应该是 nil,而不是 NULL,因为您正在比较 Objective-C 对象指针。

    mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"];

这里的mainMenu是什么?它一定是一个类,但它是什么的子类?

[mmController showWindow:self];

根据此消息和上一条消息,我猜测 mainMenu 是 NSWindowController 的子类。

不需要猜测。您应该专门命名您的类,以便任何人都可以仅通过类名就知道该类是什么及其实例。

简洁是一种美德,但如果你需要长篇大论,那就长篇大论。我们拥有具有名称补全功能的现代工具。 Tab 键可以消除缩写名称的唯一优势。

but it opens a new window.

是的。您通过从 Nib 加载窗口来创建窗口,然后告诉窗口 Controller 显示该窗口。显示一个新窗口是预期的结果。

I also tried loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self];

and it succeeded, but when I try to use the same method to get back to the main menu,

没有“回来”。加载 Nib 只是通过从存档加载对象来创建对象。您可以多次加载同一个 Nib ,并且加载 Nib 不会以某种方式撤消加载前一个 Nib 的结果。

您可能想阅读Resource Programming Guide ,其中涵盖 Nib 以及图像和声音文件,以及 Bundle Programming Guide .

如果您想隐藏从 mainGame Nib 加载的窗口,请执行此操作。 AppKit 中的术语是 “ordering out” (与“订购”相反,“ordering front”“ordering back” 是具体的操作方式)。

[NSBundle loadNibNamed:@"mainMenu" owner:self];

it doesn't work. It does nothing at all...

您是否正在尝试加载项目附带的 MainMenu Nib ?如果是这样,请确保您的大小写正确 - 您不希望您的应用程序因从区分大小写的卷运行它的人而被破坏,也不希望它被使用默认的不区分大小写的卷的人破坏。文件系统。

如果这不是您想要做的,那么就不清楚您想要做什么。 MainMenu 通常是包含主菜单(菜单栏的内容)的 Nib ;将任何其他 Nib 命名为“mainMenu”或类似名称,往好里说会引起困惑,往坏里说会出现问题。如果这应该是其他 Nib ,您应该给它一个不同的名称。

无论如何,这都不是您需要做的。如果您想隐藏从 mainGame 加载的窗口,那么您需要隐藏该窗口,而不是加载不同的 Nib 。

此外,一旦窗口被加载,就不要再次加载它(除非您关闭并释放它)。加载后,您只需将其重新订购即可。最有可能的是,您会想要 make it key and order it front .

在 Mac 上,您一次不仅限于一个窗口;事实上,无论您做什么,您的应用程序都有多个窗口(至少三个)。 API 是围绕您显示多个窗口的能力而构建的。

请参阅Window Programming Guide了解更多信息。

How can I load a nib inside of another window?

正如 Justin Meiners 已经告诉你的那样,你可能需要 NSViewController,尽管你可以不使用 NSViewController,而直接使用 loadNibNamed: 加载包含 View 的 Nib 。

请注意,NSViewController 并不像 Cocoa Touch 的 UIViewController 那样强大/有特色。

您需要阅读 View Programming Guide为此。

关于cocoa - 将 cocoa 粒放入 cocoa 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4843016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com