为什么这个iPhone程序没有调用-loadView方法?

13 浏览
0 Comments

为什么这个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];
}

提前感谢您的帮助!

0
0 Comments

为什么这个iPhone程序没有调用-loadView()方法?

问题产生的原因:可能是因为在子类中重写了UIViewController的-view方法,或者在子类中声明了一个名为view的成员变量。

解决方法:不要在子类中重写-view方法,也不要声明名为view的成员变量。

0
0 Comments

为什么这个iPhone程序没有调用-loadView方法?

问题出现的原因:

这个问题的原因是因为在viewDidLoad方法中,只有当视图从nib文件中解档出来后才会被调用。而loadView方法只有在视图属性为nil时才会被调用,用于在程序中创建视图。如果视图属性不为nil,则会创建一个没有子视图的UIView对象作为默认视图。

解决方法:

为了解决这个问题,可以在viewDidLoad方法中手动调用loadView方法来创建视图。这样即使视图已经被加载,也可以通过调用loadView方法来重新创建视图。

下面是一个示例代码:

- (void)viewDidLoad {

[super viewDidLoad];

[self loadView];

}

0
0 Comments

为什么这个iPhone程序没有调用-loadView方法?

在这个问题中,我写了两个UITableViewController来处理主视图控制器的详细数据。由于问题出在第二个视图控制器上,我创建了一个简单的UITableViewController作为第一个视图控制器,并在"主"视图控制器的XIB文件中引用了它。

当我完成第二个视图控制器后,我可以简单地将代码复制到第一个视图控制器中,删除复杂的代码,然后继续工作。但是,令我失望的是,无论我做了什么,我的简单的第一个UITableViewController的loadView方法都没有被调用。

今天,我终于意识到我在XIB文件中将UITableViewController引用到了主视图控制器的程序中。当然,loadView方法从未被调用。

为了帮助其他犯同样错误的人...

最好的祝愿,

Charles

0