用我自己的视图替换UIViewController根视图

时间:2009-10-14 01:56:00

标签: iphone objective-c uiviewcontroller loadview

我正在尝试用子类UIView替换UIViewController根视图。

在iPhone SDK的UIViewController类参考中,在其概述部分中说明了这一点:

  

您使用UIViewController的每个实例来管理全屏视图。对于简单的视图控制器,这需要管理负责呈现应用程序内容的视图层次结构。典型的视图层次结构包括一个根视图 - 该类的视图属性中可用的引用 - 以及一个或多个呈现实际内容的子视图。

在view属性上的链接之后,它会声明:

  

如果视图控制器没有关联的视图控制器,则应覆盖loadView方法并使用它创建根视图及其所有子视图。

如果此代码放在loadView中,它会创建根视图,假设我使用自己的UIView子类名为MyView:

self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

谢谢//:)

2 个答案:

答案 0 :(得分:3)

你是对的。需要显示视图时调用loadView函数,viewController的view属性是使用presentModalViewController:animated:等函数时显示的视图。如果要从NIB加载视图而不是使用loadView,则只需在该视图的属性选项卡中将视图的类更改为自定义子类。

答案 1 :(得分:1)

您应该注意,您设置view属性的任何内容都会被保留。所以你应该使用

self.view = [[[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];

MyView *v = [[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
self.view = v;
[v release];

要平衡这一点。