2012-03-05 93 views
18

我以为我不应该调用[super loadView],但有些事情让我感到困惑。可以调用[super loadView]吗?

在的loadView的描述(UIViewController Class Reference)这是说,“你这个方法的自定义实现不应该称之为超级”, 但ZoomingPDFViewer例如,他们给,的loadView实现(ZoomingPDFViewerViewController)被调用[超级的loadView]。

我试图从我的loadView方法调用它,它工作正常,但我只是不明白,那么不称呼超级。

回答

25

您绝对不应该拨打[super loadView]。我会说你在ZoomingPDFViewer例子中发现了一个bug。

当您想以编程方式为视图控制器(不使用xib)创建视图层次结构时,您覆盖loadView

正如您所指出的,文档明确指出您不应该调用super。

此方法的自定义实现不应调用超级。

我假定这是为了避免装载无论从XIB和编程创建视图,作为该方法中所使用的基体到从XIB加载的图:

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

还要注意的是,即使你UIViewController对象的分配过程中传递零的nibNameOrNil参数的UIViewController实施loadView将尝试加载任何厦门国际银行与它相关联的类名。

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

这种方法的真正意图是给你建立视图层次的完全控制,而不依赖于内置的厦门国际银行加载机制:

您可以覆盖此方法,以创建手动查看。

就个人而言,我重写loadView,如果:1)我会做它的厦门国际银行真是小巫见大巫或2)控制的布局是非常动态的,所以创造了厦门国际银行与静态布局有什么好处。

+1

+1标记的长度连同清晰/简洁...... – Damo 2012-03-05 16:41:45

0

如果您没有在您的IB中创建视图,那么您应该在代码中调用[super loadView]以查看您的程序。

如果您的自定义视图,你想用interfaz生成器创建一个视图,所以你不需要调用它。

+0

好吧,但是这意味着什么?“你的这个方法的自定义实现不应该调用super。”? – Aleksa 2012-03-05 16:06:35

+1

这意味着你正在创建视图,所以你不需要让你的超级加载它 – 2012-03-05 16:07:50

+1

你给你的程序的看法做一些事情:'UIView * myView = [[[[UIView alloc] init] autorelease]; ...(创建视图层次结构)... self.view = myView;'如果您没有将'self.view'赋值给一个新的值,那么重载'loadView'开始的重点是什么? – Sam 2012-03-05 16:15:58

1

NSViewController尝试在-loadView中初始化一个视图中的一个视图。由于你的控制器没有设置你的nib名字,它只会给你一个self.view = nil;我会假设UIViewController以同样的方式工作。

所以它应该是安全的,但你完全没有必要。

+3

虽然它应该是无害的,但如果有一个基于视图控制器名称的名称的xib,那么调用'[super loadView]'会将该nib加载到' self.view'。我从来没有见过这种情况(因为我从来没有称过超级),但基于我期望的文档。另外,我认为调用'[super loadView]'最低限度地将一个通用视图分配给'self.view',这就是你的代码应该做的事情。再次,这不会伤害任何东西(假设在调用super之后'loadView'的自定义实现为'self.view'赋值),但这是浪费的。 – Sam 2012-03-05 16:18:42

0

如果以编程方式创建ViewController,则可以在override func loadView()的开头调用super.loadView()而不是self.view = UIView(frame: UIScreen.main.bounds)来构建视图层。但是,您不应该拨打super.loadView()并同时创建自定义UIViewController.view。 只是不喜欢一个机器人来解释苹果的文档。

相关问题