为什么这个iPhone程序没有调用-loadView方法?
为什么这个iPhone程序没有调用-loadView方法?
我正在努力学习基本的iPhone编程,对于Interface Builder的工作原理有一个很好的基本理解,所以我决定尝试用编程的方式来创建视图。我已经阅读了ViewController的Apple指南并在各处搜索,但似乎找不到解决我的问题的方法。这让我相信这是一个非常简单的解决方案,但我真的对此感到非常困惑。基本上,我只是想创建一个视图,将主窗口作为其子视图。我知道如果self.view未定义,那么应该调用loadView方法,并在其中设置所有东西。以下是我的代码的当前状态:
代理:
- (void)applicationDidFinishLaunching:(UIApplication *)application { StartMenuViewController *aViewController = [[StartMenuViewController alloc] init]; self.myViewController = aViewController; [aViewController release]; UIView *controllersView = [myViewController view]; window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; [window setBackgroundColor:[UIColor redColor]]; [window addSubview:controllersView]; [window makeKeyAndVisible]; }
视图控制器:
- (id)init { if (self = [super init]) { self.title = @"Start Menu"; } return self; } // 以编程方式创建一个视图层次结构,而不使用nib。 - (void)loadView { UIView *startView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; [startView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; [startView setBackgroundColor:[UIColor greenColor]]; self.view = startView; [startView release]; }
提前感谢您的帮助!
为什么这个iPhone程序没有调用-loadView方法?
问题出现的原因:
这个问题的原因是因为在viewDidLoad方法中,只有当视图从nib文件中解档出来后才会被调用。而loadView方法只有在视图属性为nil时才会被调用,用于在程序中创建视图。如果视图属性不为nil,则会创建一个没有子视图的UIView对象作为默认视图。
解决方法:
为了解决这个问题,可以在viewDidLoad方法中手动调用loadView方法来创建视图。这样即使视图已经被加载,也可以通过调用loadView方法来重新创建视图。
下面是一个示例代码:
- (void)viewDidLoad {
[super viewDidLoad];
[self loadView];
}
为什么这个iPhone程序没有调用-loadView方法?
在这个问题中,我写了两个UITableViewController来处理主视图控制器的详细数据。由于问题出在第二个视图控制器上,我创建了一个简单的UITableViewController作为第一个视图控制器,并在"主"视图控制器的XIB文件中引用了它。
当我完成第二个视图控制器后,我可以简单地将代码复制到第一个视图控制器中,删除复杂的代码,然后继续工作。但是,令我失望的是,无论我做了什么,我的简单的第一个UITableViewController的loadView方法都没有被调用。
今天,我终于意识到我在XIB文件中将UITableViewController引用到了主视图控制器的程序中。当然,loadView方法从未被调用。
为了帮助其他犯同样错误的人...
最好的祝愿,
Charles