โอ้มนุษย์นี่ทำให้ฉันปวดหัวสองสามวันและไม่สามารถหาวิธีทำสิ่งนี้ได้ ส่วนที่แย่ที่สุดคือการสร้างโครงการ Xcode iOS ใหม่โดยใช้แม่แบบรายละเอียดหลักทำงานได้ดี โชคดีในท้ายที่สุดความจริงเล็ก ๆ น้อย ๆ ก็คือฉันพบวิธีแก้ปัญหาได้อย่างไร
มีการโพสต์บางอย่างที่ฉันได้พบว่าชี้ให้เห็นว่าการแก้ปัญหาคือการใช้ใหม่ที่มีวิธีการในการprimaryViewControllerForCollapsingSplitViewController:
UISplitViewControllerDelegate
ฉันพยายามที่จะไม่มีประโยชน์ สิ่งที่ Apple ทำในเทมเพลตรายละเอียดหลักที่ดูเหมือนว่าใช้งานได้นั้นจะใช้วิธีใหม่ (หายใจเข้าลึก ๆ เพื่อบอกวิธีทั้งหมด) splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
วิธีการมอบหมาย (อีกครั้งUISplitViewControllerDelegate
) ตามเอกสารวิธีนี้:
ขอให้ผู้รับมอบสิทธิ์ในการปรับตัวควบคุมมุมมองหลักและรวมตัวควบคุมมุมมองรองลงในอินเทอร์เฟซที่ยุบ
อย่าลืมอ่านส่วนการสนทนาของวิธีนั้นเพื่ออ่านรายละเอียดที่เฉพาะเจาะจงมากขึ้น
วิธีที่ Apple จัดการกับสิ่งนี้คือ:
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
ontoPrimaryViewController:(UIViewController *)primaryViewController {
if ([secondaryViewController isKindOfClass:[UINavigationController class]]
&& [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
&& ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
// Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return YES;
} else {
return NO;
}
}
การใช้งานโดยทั่วไปจะทำสิ่งต่อไปนี้:
- หาก
secondaryViewController
เป็นสิ่งที่เราคาดหวัง (a UINavigationController
) และมันแสดงสิ่งที่เราคาดหวัง (a DetailViewController
- ตัวควบคุมมุมมองของคุณ) แต่ไม่มีรูปแบบ ( detailItem
) จากนั้น " Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
"
- มิฉะนั้นส่งคืน "
NO
เพื่อให้ตัวควบคุมมุมมองแยกลองและรวมเนื้อหาของตัวควบคุมมุมมองรองลงในอินเทอร์เฟซที่ยุบ"
ผลลัพธ์มีดังต่อไปนี้สำหรับ iPhone ในแนวตั้ง (ไม่ว่าจะเริ่มในแนวตั้งหรือหมุนเป็นแนวตั้ง - หรือคลาสที่มีขนาดกะทัดรัดถูกต้องมากขึ้น):
- ถ้ามุมมองของคุณถูกต้อง
- และมีรูปแบบการแสดงตัวควบคุมมุมมองรายละเอียด
- แต่ไม่มีรุ่นแสดงตัวควบคุมมุมมองหลัก
- หากมุมมองของคุณไม่ถูกต้อง
ใสเหมือนโคลน
UISplitViewController
และกลับมาYES
จากวิธีนั้นเสมอจากนั้นก็เปลี่ยน class view แบบแยกย่อยใน Storyboard เพราะฉันต้องการแสดงต้นแบบบน iPhone ในแนวตั้งเสมอ :)