Iphone 具有自己的XIB的多个视图控制器,以及加载时

Iphone 具有自己的XIB的多个视图控制器,以及加载时,iphone,xcode,Iphone,Xcode,在这里的每个人的帮助下,我阅读了许多教程,并试图用多视图控制器和它们自己的xib文件来概括我的想法 我有一个例子,其中有一个:multiViewController和另外两个:aboutViewController、rulesViewController 在aboutViewController.m和rulesViewController.m文件中,我放置了以下代码: - (void)viewDidLoad { NSLog(@"rules View did load"); // (Or Abou

在这里的每个人的帮助下,我阅读了许多教程,并试图用多视图控制器和它们自己的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 for About和Rules都会启动?也就是说,我收到了NSLog消息。这是否意味着不管单独的xib文件如何,所有视图都会在启动时加载

我的观点是:我希望multiViewController成为我的主菜单,它将有单独的按钮,用于在单击时显示其他xib文件。我一直在把我的初始化代码放在viewDidLoad中,但现在看来这是错误的,因为在用户按下按钮显示该视图之前,我不想点击

一个例子是有一个视图:playGameViewController。在viewDidLoad中,我正在检查之前的游戏是否正在进行中,如果是,则提示用户是否要继续。在上述情况下,当应用程序启动时,它会立即提示,因为viewDidLoad正在启动,即使我只想先显示主菜单

任何解释都将不胜感激。提前谢谢

地理

我的问题是,为什么我跑步的时候会这样 应用程序执行ViewDidLoad 关于规则和火? 也就是说,我收到了NSLog消息。 这是否意味着无论 单独的xib文件,所有视图都是 启动时加载

当你打电话的时候

[self.view insertSubview:rulesViewController.view atIndex:0];
它将首先为初始视图调用viewDidLoad,然后为RulesViewController再次调用viewDidLoad

当您的MainViewController或任何相关视图加载时,将自动调用viewDidLoad。ViewDidLoad用于覆盖或修改nib中的任何对象,或者您可以自己创建对象。视图仅在需要时加载。如果在应用程序启动时加载所有视图,用户只会看到一个黑屏,直到处理完所有视图

你说你正在学习一些教程,我还不知道你的专业领域,但是你有没有研究过使用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];
    }
}

如果是这种情况,为什么其他两个类loadAbout和loadRules的viewDidLoad会在multiViewController启动时触发。multiViewController包含self.view insertSubview,但仅当通过按钮单击访问它们时…或者我读错了吗?在IB中,您的操作方法连接到什么?你知道是什么对象发送了执行这些操作的信号吗?在IB中,有两个按钮,每个按钮都通过内部的触碰连接到loadRules或loadAbout。这是我不理解的部分。为什么如果他们只在单击时触发,那么在应用程序运行时是否会触发loadDidView。您的操作方法和viewdidload都很好,但应用程序委托中可能存在其他原因,导致某些发件人执行这些操作。您可以使用tag属性或其他方法来确定发件人的来源吗?我已经对这段代码进行了几次模拟,但我无法让它实现您所描述的功能。