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

7
我想要用一个子类化的UIView替换UIViewController的根视图。
在iPhone SDK的UIViewController Class Reference中,在其概述部分中,它指出:
您使用每个UIViewController实例来管理全屏视图。对于简单的视图控制器,这意味着管理负责呈现应用程序内容的视图层次结构。典型的视图层次结构包括一个根视图,该类的视图属性中可用的引用以及一个或多个呈现实际内容的子视图。
在视图属性上的链接之后,它进一步说明:
如果您的视图控制器没有关联的视图控制器,则应覆盖loadView方法并使用它来创建根视图及其所有子视图。
如果将此代码放置在loadView中,是否会创建根视图,假设我正在使用自己的名为MyView的UIView子类?
self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

感谢 // :)
2个回答

6

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


1
loadView 的文档说明如下: 您可以重写此方法以手动创建视图。如果选择这样做,请将视图层次结构的根视图分配给视图属性。您创建的视图应该是唯一的实例,并且不应与任何其他视图控制器对象共享。您对此方法的自定义实现不应调用 super。 - Patrick Pijnappel

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];

为了平衡这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接