Đây là phiên bản iOS mới nhất (Được sửa đổi bằng Xcode 9.3, Swift 4.1 ). Dưới đây là tất cả các giai đoạn làm cho vòng đời UIViewController
hoàn thành.
loadView()
loadViewIfNeeded()
viewDidLoad()
viewWillAppear(_ animated: Bool)
viewWillLayoutSubviews()
viewDidLayoutSubviews()
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)
Hãy để tôi giải thích tất cả các giai đoạn.
1. loadView
Sự kiện này tạo / tải chế độ xem mà bộ điều khiển quản lý. Nó có thể tải từ một tệp nib liên quan hoặc trống UIView
nếu null được tìm thấy. Điều này làm cho nó trở thành một nơi tốt để tạo các khung nhìn của bạn trong mã theo chương trình.
Đây là nơi các lớp con sẽ tạo cấu trúc phân cấp chế độ xem tùy chỉnh nếu chúng không sử dụng ngòi. Không bao giờ nên được gọi trực tiếp. Chỉ ghi đè phương thức này khi bạn lập trình tạo các khung nhìn và gán chế độ xem gốc cho thuộc view
tính Đừng gọi siêu phương thức khi bạn ghi đè
loadView
2. loadViewIfNeeded
Nếu chế độ xem hiện tại viewController
chưa được đặt thì phương thức này sẽ tải chế độ xem nhưng hãy nhớ, điều này chỉ khả dụng trong iOS> = 9.0. Vì vậy, nếu bạn đang hỗ trợ iOS <9.0 thì đừng hy vọng nó sẽ xuất hiện trong ảnh.
Tải chế độ xem của trình điều khiển xem nếu nó chưa được đặt.
3. viewDidLoad
Sự viewDidLoad
kiện chỉ được gọi khi chế độ xem được tạo và tải vào bộ nhớ nhưng giới hạn cho chế độ xem chưa được xác định. Đây là một nơi tốt để khởi tạo các đối tượng mà trình điều khiển khung nhìn sẽ sử dụng.
Được gọi sau khi xem đã được tải. Đối với các bộ điều khiển xem được tạo trong mã, đây là sau -loadView. Đối với các bộ điều khiển chế độ xem không được lưu trữ từ ngòi, đây là sau khi chế độ xem được đặt.
4. viewWillAppear
Sự kiện này thông báo viewController
bất cứ khi nào chế độ xem xuất hiện trên màn hình. Trong bước này, khung nhìn có các giới hạn được xác định nhưng hướng không được đặt.
Được gọi khi chế độ xem sắp hiển thị. Mặc định không có gì.
5. viewWillLayoutSubviews
Đây là bước đầu tiên trong vòng đời mà giới hạn được hoàn thành. Nếu bạn không sử dụng các ràng buộc hoặc Bố cục tự động, có lẽ bạn muốn cập nhật các bài phỏng vấn ở đây. Điều này chỉ khả dụng trong iOS> = 5.0. Vì vậy, nếu bạn đang hỗ trợ iOS <5.0 thì đừng hy vọng nó sẽ xuất hiện trong ảnh.
Được gọi ngay trước khi phương thức layoutSubview của trình điều khiển khung nhìn được gọi. Các lớp con có thể thực hiện khi cần thiết. Mặc định là một nop.
6. viewDidLayoutSubviews
Sự kiện này thông báo cho bộ điều khiển xem rằng các cuộc phỏng vấn đã được thiết lập. Đó là một nơi tốt để thực hiện bất kỳ thay đổi cho các cuộc phỏng vấn sau khi chúng đã được thiết lập. Điều này chỉ khả dụng trong iOS> = 5.0. Vì vậy, nếu bạn đang hỗ trợ iOS <5.0 thì đừng hy vọng nó sẽ xuất hiện trong ảnh.
Được gọi ngay sau khi phương thức layoutSubview của trình điều khiển khung nhìn được gọi. Các lớp con có thể thực hiện khi cần thiết. Mặc định là một nop.
7. viewDidAppear
Sự viewDidAppear
kiện này sẽ kích hoạt sau khi chế độ xem được hiển thị trên màn hình. Điều này làm cho nó trở thành một nơi tốt để lấy dữ liệu từ dịch vụ phụ trợ hoặc cơ sở dữ liệu.
Được gọi khi chế độ xem đã được chuyển hoàn toàn lên màn hình. Mặc định không có gì
số 8. viewWillDisappear
Sự viewWillDisappear
kiện này bùng cháy khi chế độ xem được trình bày viewController
sắp biến mất, loại bỏ, che đậy hoặc ẩn đằng sau khác viewController
. Đây là một nơi tốt để bạn có thể hạn chế các cuộc gọi mạng, hẹn giờ không hợp lệ hoặc giải phóng các đối tượng bị ràng buộc với điều đó viewController
.
Được gọi khi chế độ xem bị loại bỏ, được bảo hiểm hoặc ẩn.
9. viewDidDisappear
Đây là bước cuối cùng của vòng đời mà bất kỳ ai cũng có thể giải quyết khi sự kiện này diễn ra ngay sau khi chế độ xem được trình bày viewController
đã bị biến mất, bị loại bỏ, che đậy hoặc ẩn đi.
Được gọi sau khi chế độ xem bị loại bỏ, được bảo hiểm hoặc ẩn. Mặc định không có gì
Bây giờ theo Apple khi bạn đang thực hiện các phương pháp này, bạn nên nhớ gọi super
thực hiện phương pháp cụ thể đó.
Nếu bạn phân lớp UIViewControll, bạn phải gọi siêu triển khai của phương thức này, ngay cả khi bạn không sử dụng NIB. (Để thuận tiện, phương thức init mặc định sẽ thực hiện điều này cho bạn và chỉ định nil cho cả hai đối số của phương thức này.) kết nối với quan điểm chính. Nếu bạn gọi phương thức này bằng tên nil, thì -loadView
phương thức của lớp này sẽ cố tải một NIB có tên giống với lớp của trình điều khiển xem của bạn. Nếu thực tế không tồn tại NIB như vậy thì bạn phải gọi -setView:
trước khi -view
được gọi hoặc ghi đè -loadView
phương thức để thiết lập các khung nhìn của bạn theo chương trình.
Hy vọng điều này sẽ giúp. Cảm ơn.
CẬP NHẬT - Như @ThomasW đã chỉ bên trong nhận xét viewWillLayoutSubviews
và viewDidLayoutSubviews
cũng sẽ được gọi vào thời điểm khác khi các chế độ xem của chế độ xem chính được tải, ví dụ khi các ô của chế độ xem bảng hoặc chế độ xem bộ sưu tập được tải.
CẬP NHẬT - Như @Maria chỉ trong bình luận, mô tả về loadView
đã được cập nhật