多个视图控制器具有自己的xib,并在加载时

时间:2010-03-02 15:32:03

标签: iphone xcode

通过许多教程并在这里的每个人的帮助下,我试图使用具有自己的xib文件的多视图控制器。

我有一个例子,其中有一个:multiViewController和另外两个:aboutViewController,rulesViewController。

在aboutViewController.m和rulesViewController.m文件中,我放置了以下代码:

- (void)viewDidLoad {
NSLog(@"rules View did load"); // (Or About View did load, depending on the .m file)
[super viewDidLoad];
 }

mainViewController.m文件包含:

-(IBAction) loadRules:(id) sender {
[self clearView];
[self.view insertSubview:rulesViewController.view atIndex:0];
}

-(IBAction) loadAbout:(id) sender {
[self clearView];
[self.view insertSubview:aboutViewController.view atIndex:0];

}

我的问题是,为什么当我运行应用程序时,ViewDidLoad是关于About和Rules的?意思是,我得到了NSLog消息。这是否意味着无论单独的xib文件如何,所有视图都会在启动时加载?

我的观点是:我希望multiViewController成为我的主菜单,它将具有单独的按钮,用于在单击时显示其他xib文件。我一直把我的“initalize”代码放在viewDidLoad中,但现在这似乎不对,因为我不想在用户按下按钮显示该视图之前点击。

一个例子是有一个视图:playGameViewController。在viewDidLoad中,我正在检查以前的游戏是否正在进行中,如果是,请提示用户是否要恢复。在上面的例子中,当应用程序启动时,它会立即提示(因为viewDidLoad正在激活),即使我只是想先显示主菜单。

非常感谢任何解释。提前谢谢。

地理......

1 个答案:

答案 0 :(得分:0)

  

我的问题是,为什么我跑的时候   该应用程序执行V​​iewDidLoad   关于About和Rules fire?   意思是,我得到了NSLog消息。   这是否意味着无论如何   单独的xib文件,所有视图都是   在启动时加载?

致电时

[self.view insertSubview:rulesViewController.view atIndex:0];

首先为初始视图调用viewDidLoad,然后再为viewDidLoad调用RulesViewController

当您的MainViewController或任何视图加载时,会自动调用viewDidLoadViewDidLoad是为了覆盖或修改笔尖中的任何对象,或者您可以自己创建对象。视图仅在需要时加载。如果您在应用程序启动时最初加载所有视图,则用户只会看到黑屏,直到处理完所有视图。

您说您正在阅读一些教程,我还不了解您的专业领域,但您是否使用UINavigationController查看了基于导航的应用程序?

作为您的请求的一个示例,如果您想要一个按钮加载视图,您可以执行类似的操作。

- (IBAction)pushSecondView:(id)sender {
SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    if (secondView != nil) {
        secondView.title = @"Second View";
        [self.navigationController pushViewController: secondView animated: YES];
    }
}