Trong WWDC 2011 Phiên 102, Apple đã giới thiệu View Controller Containment, đây là khả năng tạo vùng chứa bộ điều khiển chế độ xem tùy chỉnh, tương tự như UITabBarController
, UINavigationController
và các loại tương tự.Chế độ xem Ngăn xếp bộ điều khiển hoạt động như thế nào trong iOS 5?
Tôi đã xem các ví dụ một vài lần. Có một loạt các phương pháp liên kết với mẫu này, nhưng có một chút khó khăn để tìm ra chính xác. Tôi sẽ đăng ở đây những gì tôi nghĩ đang diễn ra và xem liệu cộng đồng có xác nhận hay không xác nhận những nghi ngờ của tôi.
Kịch bản 1: Chuyển từ không có cha mẹ để một bộ điều khiển xem mẹ mới
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
Do hai dòng đầu tiên phải xảy ra theo trình tự nhất định, hoặc họ có thể bị đảo ngược?
Kịch bản 2: Chuyển từ một bộ điều khiển xem cha mẹ không xem điều khiển cha mẹ
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
là nó cũng cần thiết để gọi [vc didMoveToParentViewController:nil]
? Các ví dụ trong Phiên 102 không làm điều này trong trường hợp này, nhưng tôi không biết liệu đó có phải là một thiếu sót hay không.
Kịch bản 3: Di chuyển từ điều khiển xem một phụ huynh khác
này có khả năng sẽ xảy ra theo cách sau, bởi vì logic trong mỗi bộ điều khiển xem phụ huynh sẽ được đóng gói.
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
Câu hỏi
câu hỏi chính của tôi là thế này: Đây có phải là cách xem điều khiển ngăn chặn nên làm việc, nói chung? Các cơ chế được đưa ra ở trên có chính xác không?
Có cần phải gọi willMoveToParentViewController
trước khi gọi addChildViewController
? Điều này có vẻ như thứ tự hợp lý với tôi, nhưng nó có cần thiết không?
Có cần gọi số didMoveToParentViewController:nil
sau khi gọi removeFromParentViewController
không?
Vấn đề là khi tôi cố gắng thêm thẻ ios5, tôi vô tình nhấn enter, mà thêm vào các bài mặc dù tôi đã không sáng tác/chỉnh sửa nó kết thúc. Tôi đã cố gắng xóa nó nhưng sau đó thấy rằng tôi chỉ có thể * bỏ phiếu * để xóa nó. –