通过许多教程并在这里的每个人的帮助下,我试图使用具有自己的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正在激活),即使我只是想先显示主菜单。
非常感谢任何解释。提前谢谢。
地理......
答案 0 :(得分:0)
我的问题是,为什么我跑的时候 该应用程序执行ViewDidLoad 关于About和Rules fire? 意思是,我得到了NSLog消息。 这是否意味着无论如何 单独的xib文件,所有视图都是 在启动时加载?
致电时
[self.view insertSubview:rulesViewController.view atIndex:0];
首先为初始视图调用viewDidLoad
,然后再为viewDidLoad
调用RulesViewController
。
当您的MainViewController或任何视图加载时,会自动调用viewDidLoad
。 ViewDidLoad
是为了覆盖或修改笔尖中的任何对象,或者您可以自己创建对象。视图仅在需要时加载。如果您在应用程序启动时最初加载所有视图,则用户只会看到黑屏,直到处理完所有视图。
您说您正在阅读一些教程,我还不了解您的专业领域,但您是否使用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];
}
}