Dav*_*cia 8 macos cocoa objective-c nsviewcontroller
所以我开始学习如何使用Cocoa.我想我已经得到了它,但我已经挂断了创建和切换视图.我正在改写我之前做过的练习游戏.我想要的只是一个窗口(最好不能调整大小),我希望能够在游戏中切换不同屏幕的视图.
首先,我有主菜单(开始游戏,高分,退出).然后我需要一个窗口为每个屏幕(游戏屏幕,高分屏幕).
我对此感到困惑的是如何设计它.我查找了NSViewController,认为它管理视图,但事实并非如此.它只通过加载它来管理一个视图.我不明白为什么我需要使用NSViewController.难道我不能只有一个包含多个NSView子类的窗口类并加载它们吗?我不确定我是否了解ViewController的用途.
我的Window类是否真的需要子类化NSWindowController?我试图按照Apple的ViewController示例的例子,它有一个窗口控制器类,它是NSWindowController的子类.我没有看到子类化的目的是什么.所有NSWindowController似乎都添加了- initWithPath:(NSString *)newPath但是当我可以编辑plist文件以在启动时打开窗口时,我无法看到它的用途.Apple的例子还有一个NSView变量和一个NSViewController变量.您是否只需要一个变量来存储当前视图?
先谢谢你们,我真的很困惑这是怎么回事.
听起来你正试图在窗口中换掉内容视图?如果是这种情况,您可以使用-[NSView replaceSubview:with:]with -[NSWindow contentView]作为接收器.
假设您有一个名为的标题页titleView和一个名为的菜单页menuView,您希望将它们交换进应用程序的主窗口.如果标题页可见并且用户点击"主菜单"按钮或链接,您可以在按钮的委托方法中输入这样的内容:
[[[NSApp mainWindow] contentView] replaceSubview:titleView with:menuView];
Run Code Online (Sandbox Code Playgroud)
有两点需要注意:
titleView在这种情况下,旧视图由此调用释放.如果您希望它仍然可用,您必须retain在更换之前使用它.contentView很容易,但您可以在混合中添加一些核心动画,以赋予它一些风格.我希望这有帮助!
您可以使用NSWindowController和NSViewController管理的窗口或视图,因为您只需要创建的子类NSWindow或NSView新的窗口或视图的"种".例如,如果要使用圆形窗口,则可以进行子类化NSWindow.如果您只想在窗口中拥有控件,则为子类NSWindowController.
它是相同的NSViewController:通常一个NSViewController's视图将是一些基类,如NSView(或者你自己的NSView子类绘制自定义背景).该NSViewController管理该视图的子视图之间的交互,允许它作为你的更大的应用程序中的一个单元.
可以这样想:视图绘制,并将原始输入事件转换为更高级别的操作.控制器向视图提供信息并处理操作.
以这种方式组合可以大大提高代码的模块性,使其更易于设计,编写和调试.
使用 UIVew 中定义的以下函数(它是现有窗口的一部分)
- (void)addSubview:(UIView *)view
- (void)removeFromSuperview
Run Code Online (Sandbox Code Playgroud)