在Matt编写的iOS 4编程中,他说:
“要手动提供带有视图的
UIViewController,请实现其loadView方法…你不能叫super“。
在埃丽卡·萨顿( Erica )的“iOS 5开发者食谱”中,她说:
“
loadView方法允许您设置屏幕和布局任何子视图…。当您从专用子类(如UITableViewController或UITabBarController)继承时,一定要调用UITableViewController。“
至少对我来说,这是令人困惑的。
发布于 2012-02-02 00:32:22
苹果是真相的源泉,他们说没有超级电话。
如果要手动创建视图,则应重写此方法,并将层次结构的根视图分配给视图属性。(您创建的视图应该是唯一的实例,不应该与任何其他视图控制器对象共享。)此方法的自定义实现不应调用超级。
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
编辑
分散在UIViewController类引用中的另一个重要注意事项是:
默认的loadView方法尝试从与视图控制器关联的nib文件(如果有的话)加载视图。
发布于 2021-01-01 19:06:38
这是一个很老的问题,但我发现它需要一个比它所得到的更好的答案。
是否应该从
[super loadView]中调用loadView?
这要看情况了。你引用的两个来源是关于不同情况的,它们在描述的上下文中都是正确的。
纽伯格引用的是直接从UIViewController继承的视图控制器。该类有自己的loadView实现,它提供默认行为;具体来说,它从与视图控制器关联的.xib (或情节提要)文件中自动加载视图层次结构。如果您调用该方法的UIViewController版本,则在该方法中创建的视图层次结构将替换您自己的实现的视图层次结构,反之亦然。在提出这个问题九年后,方法仍然对此发出警告:
您可以重写此方法,以便手动创建视图。如果选择这样做,请将视图层次结构的根视图分配给视图属性。您创建的视图应该是唯一的实例,不应该与任何其他视图控制器对象共享。此方法的自定义实现不应调用超级.重点添加
Sadun引用的是另一种情况,即您的视图控制器不是UIViewController的直接子类,而是从UITableViewController、UITabBarController等派生的。这些类本身覆盖-loadView,需要调用它们的版本。至少在UITableViewController的情况下,这是在概述部分中提到的:
您可以重写loadView或任何其他超类方法,但如果这样做,请确保调用该方法的超类实现,通常是作为第一个方法调用。
因此,如果您正在子类UIViewController并提供自己的-loadView实现来生成控制器的视图,而不是使用.xib或情节提要来提供视图,则不要调用超类的-loadView方法。另一方面,如果您正在子类(如UITableView )并执行相同的操作,请检查文档,以确定是否需要从您自己的覆盖中调用该类的-loadView方法。
https://stackoverflow.com/questions/9105450
复制相似问题