iPhone有两个视图与一个视图控制器相关联

时间:2010-09-28 02:50:10

标签: iphone view views controller

Blarg!

我正在尝试开发具有类似塞尔达品质的游戏。 (即,当PC到达屏幕边缘时,屏幕将切换到下一个视图,并且PC的位置将在适当的边缘重新开始。)

我遇到的问题是我不希望每个级别段都有多个视图控制器,因为原始“LevelView”控制器中存在所有数据/功能。如何保留此“LevelView”控制器中的代码,同时仅切换NIB文件? (即我想要的唯一类是AppDelegate,“LevelView”,“ItemView”等。)我不想为游戏中的每个NIB文件重新创建一个视图控制器。

感谢您提供的任何帮助!非常感谢你! :d

2 个答案:

答案 0 :(得分:1)

创建一个只包含新视图的NIB文件。将NIB文件中File's Owner的类更改为LevelView控制器的类。如果要加载新的NIB文件,请从LevelView控制器调用以下代码:

NSArray *topLevelObjects = [[[NSBundle mainBundle] loadNibNamed:@"Put your nib file name here" owner:self options:nil];
UIView *newLevelView = [[topLevelObjects objectAtIndex:0] retain];

这是做什么的?当您调用loadNibNamed时,它会返回NIB文件中顶级对象的数组。 “文件所有者”和“第一响应者”代理对象不计为顶级对象。因此,您将获得一个只包含NIB文件中顶级视图的数组。您将self作为文件的所有者传递,以便您在顶级视图的子视图和界面构建器中的“文件所有者”之间建立的任何插座连接都已连接。

如果将顶级视图连接到视图控制器中的插座,则无需对返回的数组loadNibNamed执行任何操作。只需忽略它,它就会自动释放(它会以保留计数0返回给你)。

现在,我认为以这种方式做事是一个坏主意。我认为有更好的方法来设计您的应用程序。例如,创建描述级别的数据文件(例如属性列表或XML文件)可能更有意义,而不是将所有级别放入NIB文件中。但是,如果你真的想这样做,上面的内容应该让你开始。

答案 1 :(得分:1)

使用NSUserDefaults并从那里获取。