objective-c - 如何在 Cocoa 应用程序中切换 View ?

标签 objective-c cocoa macos nsviewcontroller

所以我开始学习如何使用 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];

需要注意的两点:

  1. 旧 View ,在本例中为 titleView,由此调用释放。如果您希望它仍然可用,则必须在更换之前保留它。
  2. 如果您的页面具有不同的尺寸,父 View 将不会调整大小。更改窗口的框架大小以及 contentView 非常简单,但您可以在组合中添加一点核心动画以赋予它一些风格。

希望对您有所帮助!

关于objective-c - 如何在 Cocoa 应用程序中切换 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272670/

相关文章:

objective-c - 发送消息到已释放实例时,-dealloc崩溃

objective-c - UIScrollView 滚动方向

iphone - Objective-C的描述方法不能包含 "self"?

python - 安装 PyGraphviz 时出错(Mac OS X、Anaconda)

objective-c - 基于文档的 OSX 应用程序 - 将打开文档的数量限制为一个

ios - UIView:alpha:0、hidden:YES、removeViewFromSuperview 和 frame.origin.y = -100000 之间的性能/内存差异;

cocoa - 在 Cocoa 应用程序中显示硬盘上所有 PDF 文件的列表

swift - Swift中didSet和willSet是如何实现的

macos - 谁在监听 Mac OS X 上给定的 TCP 端口?

macos - 有没有办法确定 Mac 是否连接了多个鼠标?