11.1_loadView方法的用途
loadView 方法的核心作用
loadView 方法是 UIViewController 生命周期中一个至关重要的环节。它负责创建视图控制器所管理的根视图 (self.view)。当视图控制器的 view 属性被访问,但尚未创建时,系统就会调用 loadView。这是一个绝佳的机会,让你完全掌控视图的创建过程!🚀
手动创建视图的强大之处
默认情况下,UIViewController 会创建一个空白的 UIView 作为其根视图。然而,通过重写 loadView,你可以用自定义的视图替换这个默认行为。这对于那些不使用 Interface Builder 或 Storyboard 的项目来说,简直是太棒了!你可以完全通过代码来构建你的 UI。
何时重写 loadView?
你通常会在以下几种情况重写 loadView:
- 完全通过代码构建 UI:当你希望完全摆脱 Interface Builder,从零开始用代码构建所有视图时。
- 使用自定义视图类作为根视图:如果你的视图控制器需要一个特定类型的自定义视图(例如,一个
GLKView或一个自定义的UIScrollView子类)作为其根视图。 - 优化视图层级:在某些性能敏感的场景下,你可能需要更精细地控制根视图的创建,以减少不必要的视图层级。
loadView 的实现细节与注意事项
在 loadView 方法中,你绝不能调用 super.loadView()。这是因为 super.loadView() 的默认实现就是创建那个空白的 UIView。如果你调用了它,然后又创建了自己的视图,就会造成不必要的资源浪费。记住,你的目标是替换它!
以下是一个简单的 loadView 实现示例:
override func loadView() {
let customView = UIView()
customView.backgroundColor = .systemBlue
self.view = customView
}在这个例子中,我们创建了一个蓝色的 UIView,并将其赋值给 self.view。就是这么简单!✨
loadView 与 viewDidLoad 的区别
理解 loadView 和 viewDidLoad 的区别至关重要。
loadView的职责是创建视图控制器的根视图。viewDidLoad的职责是在视图加载完成后进行额外的配置和设置。
这意味着,在 viewDidLoad 被调用时,self.view 已经存在并且可用了。你可以在 viewDidLoad 中添加子视图、设置约束、加载数据等。例如,你可以在 viewDidLoad 中向 self.view 添加一个 UILabel。
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.text = "欢迎来到我的自定义视图!"
label.textColor = .white
label.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(label)
NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
])
}通过这种方式,你能够清晰地分离视图的创建和配置逻辑,让你的代码更加整洁和易于维护。💪 掌握 loadView 的用途,将让你在 UIKit 编程中拥有更强大的控制力!