将可可粒放入可可中

2023-11-30

如何将笔尖加载到另一个窗口内?

我尝试了 initWithWindowName,

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

但它会打开一个新窗口。

我也尝试过 loadNibNamed

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

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

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

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


我尝试了 initWithWindowName,

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

if (mmController == NULL)

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

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

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

[mmController showWindow:self];

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

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

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

但它会打开一个新窗口。

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

我也尝试过 loadNibNamed

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

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

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

您可能想阅读资源编程指南,其中涵盖笔尖以及图像和声音文件,以及捆绑编程指南.

如果您想隐藏从加载的窗口mainGame笔尖,这样做。 AppKit 中的术语是“订购”(与“订购”相反,“前台订购” and “订购回来”是具体的做法)。

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

它不起作用。它根本没有任何作用...

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

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

无论哪种方式,这都不是您需要做的。如果您想隐藏加载的窗口mainGame,那么您需要隐藏该窗口,而不是加载不同的笔尖。

此外,一旦窗口被加载,就不要再次加载它(除非您关闭并释放它)。加载后,您只需将其重新订购即可。很可能,您会想要两者使其成为关键并在前面订购.

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

See the 窗口编程指南了解更多信息。

如何将笔尖加载到另一个窗口内?

正如 Justin Meiners 已经告诉你的那样,你可能需要 NSViewController 来实现这一点,尽管你可以不使用 NSViewController,直接使用加载包含视图的笔尖loadNibNamed:.

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

你会想阅读查看编程指南为了这。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将可可粒放入可可中 的相关文章

随机推荐