Skip to content

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 实现示例:

swift
override func loadView() {
    let customView = UIView()
    customView.backgroundColor = .systemBlue
    self.view = customView
}

在这个例子中,我们创建了一个蓝色的 UIView,并将其赋值给 self.view。就是这么简单!✨

loadViewviewDidLoad 的区别

理解 loadViewviewDidLoad 的区别至关重要。

  • loadView 的职责是创建视图控制器的根视图。
  • viewDidLoad 的职责是在视图加载完成后进行额外的配置和设置。

这意味着,在 viewDidLoad 被调用时,self.view 已经存在并且可用了。你可以在 viewDidLoad 中添加子视图、设置约束、加载数据等。例如,你可以在 viewDidLoad 中向 self.view 添加一个 UILabel

swift
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 编程中拥有更强大的控制力!

本站使用 VitePress 制作