可以调用[super loadView]吗?

Ale*_*ksa 25 uiviewcontroller loadview ios

我以为我永远不应该调用[super loadView],但有些东西让我感到困惑.

在loadView(UIViewController类参考)的描述中,它说"你的自定义实现这个方法不应该调用super.",但是在他们给出的ZoomingPDFViewer示例中,loadView实现(ZoomingPDFViewerViewController)正在调用[super loadView].

我试图从我的loadView方法调用它,它工作正常,但我只是不明白那么不调用超级是什么意思.

Sam*_*Sam 30

你绝对不应该打电话[super loadView].我会说你在ZoomingPDFViewer示例中发现了一个错误.

如果loadView要以编程方式为视图控制器创建视图层次结构(不使用xib),则覆盖.

正如你所指出的那样,文档明确指出你不应该称之为超级.

您对此方法的自定义实现不应该调用super.

我假设这是为了避免从xib加载并以编程方式创建视图,因为base使用此方法从xib加载视图:

如果视图控制器具有关联的nib文件,则此方法从nib文件加载视图.

另请注意,即使在分配UIViewController对象期间,您也会为nib​​NameOrNil参数传递nil,该UIViewController实现loadView将尝试加载任何带有关联类名的xib.

如果nibName属性返回非零值,则视图控制器具有关联的nib文件,如果视图控制器是从故事板实例化的,如果使用initWithNibName:bundle:方法显式地为其分配了nib文件,或者iOS在应用程序包中找到一个nib文件,其名称基于视图控制器的类名.如果视图控制器没有关联的nib文件,则此方法会创建一个普通的UIView对象.

此方法的真正意图是让您完全控制构建视图层次结构,而无需依赖内置的xib加载机制:

您可以覆盖此方法以手动创建视图.

就个人而言,我重写loadView如果:1.)我会为它做的xib非常简单或2.)控件的布局非常动态,因此创建一个静态布局的xib几乎没有什么好处.