ในงาน 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
และควรมีความสมดุลกับwillMoveToParentViewController
removeFromParentViewController
นี่คือสิ่งที่ฉันกำลังมองหา ไม่แน่ใจว่าฉันพลาดในเอกสารนี้ไปได้อย่างไร