ในงาน WWDC 2011 เซสชัน 102, Apple เปิดดูควบคุมกักกันซึ่งเป็นความสามารถในการสร้างมุมมองที่กำหนดเองภาชนะควบคุมคล้ายคลึงกับUITabBarController, UINavigationControllerและไม่ชอบ
ฉันดูตัวอย่างหลายครั้ง มีวิธีการที่ยุ่งยากที่เกี่ยวข้องกับรูปแบบนี้ แต่ก็ยากเล็กน้อยที่จะเข้าใจอย่างแน่ชัด ฉันจะโพสต์สิ่งที่ฉันคิดไว้ที่นี่และดูว่าชุมชนจะยืนยันหรือไม่ยืนยันความสงสัยของฉัน
สถานการณ์ที่ 1: การย้ายจากผู้ปกครองไปยังตัวควบคุมมุมมองหลักใหม่
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
สองบรรทัดแรกต้องเกิดขึ้นตามลำดับที่กำหนดหรือสามารถย้อนกลับได้หรือไม่?
สถานการณ์ที่ 2: การย้ายจากตัวควบคุมมุมมองหลักไปยังไม่มีตัวควบคุมมุมมองหลัก
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
ยังจำเป็นต้องโทร[vc didMoveToParentViewController:nil]? ตัวอย่างในเซสชัน 102 ไม่ได้ทำสิ่งนี้ในสถานการณ์นี้ แต่ฉันไม่รู้ว่านั่นเป็นการละเว้นหรือไม่
สถานการณ์ที่ 3: การย้ายจากตัวควบคุมมุมมองหลักไปยังอีกตัวหนึ่ง
สิ่งนี้อาจเกิดขึ้นในลักษณะต่อไปนี้เนื่องจากตรรกะในตัวควบคุมมุมมองหลักแต่ละตัวจะถูกห่อหุ้ม
// 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];
คำถาม
คำถามหลักของฉันคือ: โดยทั่วไปแล้วการควบคุมมุมมองควรทำงานอย่างไร กลไกที่ระบุข้างต้นถูกต้องหรือไม่?
willMoveToParentViewControllerก่อนโทรจำเป็นaddChildViewControllerหรือไม่? นี่ดูเหมือนจะเป็นคำสั่งทางตรรกะสำหรับฉัน แต่มันจำเป็นอย่างยิ่งหรือไม่?
didMoveToParentViewController:nilหลังโทรจำเป็นremoveFromParentViewControllerไหม?
addChildViewControllerควรมีความสมดุลด้วยdidMoveToParentViewControllerและควรมีความสมดุลกับwillMoveToParentViewControllerremoveFromParentViewControllerนี่คือสิ่งที่ฉันกำลังมองหา ไม่แน่ใจว่าฉันพลาดในเอกสารนี้ไปได้อย่างไร