所以我开始学习如何使用 Cocoa。我想我已经差不多明白了,但我对创建和切换 View 挂断了。我正在重写我之前为练习制作的游戏。我只想要一个窗口(最好不能调整大小),并且我希望能够在游戏中切换不同屏幕的 View 。
首先,我有主菜单(开始游戏、高分、退出)。然后我需要为每个屏幕(游戏屏幕、高分屏幕)创建一个窗口。
我感到困惑的是如何设计它。我查找了 NSViewController 认为它管理 View ,但事实并非如此。它只通过真正加载来管理一个 View 。我不明白为什么那时我需要使用 NSViewController 。我不能只拥有一个包含多个 NSView 子类的窗口类并像那样加载它们吗?我不确定我是否理解 ViewController 的用途。
我的窗口类真的需要子类化 NSWindowController 吗?我试图效仿 Apple 的 ViewController 示例,它有一个窗口 Controller 类,它是 NSWindowController 的子类。我不明白将其子类化的目的是什么。所有 NSWindowController 似乎都添加了 - initWithPath:(NSString *)newPath
但是当我只能编辑 plist 文件以在启动时打开窗口时,我看不到其中的用途。 Apple 的示例也有一个 NSView 变量和一个 NSViewController 变量。你不是只需要一个变量来存储当前 View 吗?
提前谢谢大家,我真的很困惑这是如何工作的。
最佳答案
听起来您正在尝试换出窗口中的内容 View ?如果是这种情况,您可以使用 -[NSView replaceSubview:with:]
和 -[NSWindow contentView]
作为接收者。
假设您有一个名为 titleView
的标题页和一个名为 menuView
的菜单页,并且您想要将它们调入调出应用程序的主窗口。如果标题页可见并且用户单击“主菜单”按钮或链接,您可以在按钮的委托(delegate)方法中放置如下内容:
[[[NSApp mainWindow] contentView] replaceSubview:titleView with:menuView];
需要注意的两点:
- 旧 View ,在本例中为
titleView
,由此调用释放。如果您希望它仍然可用,则必须在更换之前保留
它。 - 如果您的页面具有不同的尺寸,父 View 将不会调整大小。更改窗口的框架大小以及
contentView
非常简单,但您可以在组合中添加一点核心动画以赋予它一些风格。
希望对您有所帮助!
关于objective-c - 如何在 Cocoa 应用程序中切换 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272670/