ฉันมีแอพ iPhone ที่ใช้UINavigationController
เพื่อนำเสนออินเทอร์เฟซแบบเจาะลึก: มุมมองแรกหนึ่งมุมมองจากนั้นอีกมุมมองหนึ่งลึกถึงสี่ระดับ ฉันต้องการให้สามมุมมองแรก จำกัด เฉพาะการวางแนวตั้งและเฉพาะมุมมองสุดท้ายเท่านั้นที่ควรได้รับอนุญาตให้หมุนเป็นแนวนอน เมื่อกลับจากมุมมองที่สี่ไปยังมุมมองที่สามและมุมมองที่สี่อยู่ในแนวนอนฉันต้องการให้ทุกอย่างหมุนกลับเป็นแนวตั้ง
ใน iOS 5 ฉันเพียงกำหนดshouldAutorotateToInterfaceOrientation:
ในตัวควบคุมมุมมองแต่ละตัวของฉันให้ส่งคืนใช่สำหรับการวางแนวที่อนุญาต ทุกอย่างทำงานตามที่อธิบายไว้ข้างต้นรวมถึงการกลับสู่แนวตั้งแม้ว่าอุปกรณ์จะอยู่ในแนวนอนเมื่อกลับจากตัวควบคุมมุมมอง # 4 ถึง # 3
ใน iOS 6 ตัวควบคุมมุมมองทั้งหมดจะหมุนเป็นแนวนอนโดยทำลายสิ่งที่ไม่ได้ตั้งใจไว้ บันทึกประจำรุ่น iOS 6 กล่าวว่า
ความรับผิดชอบมากขึ้นกำลังย้ายไปที่แอปและผู้แทนของแอป ตอนนี้คอนเทนเนอร์ iOS (เช่น
UINavigationController
) ไม่ได้ปรึกษาบุตรหลานเพื่อพิจารณาว่าพวกเขาควรหมุนอัตโนมัติหรือไม่ [... ] ระบบจะขอตัวควบคุมมุมมองแบบเต็มหน้าจอที่อยู่ด้านบนสุด (โดยทั่วไปคือตัวควบคุมมุมมองรูท) สำหรับการวางแนวอินเทอร์เฟซที่รองรับเมื่อใดก็ตามที่อุปกรณ์หมุนหรือเมื่อใดก็ตามที่ตัวควบคุมมุมมองถูกนำเสนอด้วยรูปแบบการนำเสนอแบบเต็มหน้าจอ ยิ่งไปกว่านั้นการวางแนวที่รองรับจะถูกดึงออกมาก็ต่อเมื่อตัวควบคุมมุมมองนี้ส่งคืน YES จากshouldAutorotate
วิธีการเท่านั้น [... ] ระบบจะพิจารณาว่าการวางแนวได้รับการสนับสนุนหรือไม่โดยการตัดกันค่าที่ส่งคืนโดยsupportedInterfaceOrientationsForWindow:
วิธีการของแอปด้วยค่าที่ส่งคืนโดยsupportedInterfaceOrientations
วิธีการของตัวควบคุมแบบเต็มหน้าจอด้านบนสุด
ดังนั้นฉันจึงจัดคลาสย่อยUINavigationController
ให้MainNavigationController
คุณสมบัติบูลีนของฉันlandscapeOK
และใช้สิ่งนี้เพื่อส่งคืนการวางแนวที่อนุญาตในsupportedInterfaceOrientations
. จากนั้นในแต่ละviewWillAppear:
วิธีการควบคุมมุมมองของฉันฉันมีบรรทัดแบบนี้
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
เพื่อบอกMainNavigationController
พฤติกรรมที่ฉันต้องการ
คำถามมาที่นี่:ถ้าตอนนี้ฉันไปที่มุมมองที่สี่ของฉันในโหมดแนวตั้งและพลิกโทรศัพท์จะหมุนเป็นแนวนอน ตอนนี้ฉันกดปุ่มย้อนกลับเพื่อกลับไปที่มุมมองที่สามของฉันซึ่งควรจะใช้งานได้ในแนวตั้งเท่านั้น แต่มันไม่หมุนกลับ. ฉันจะทำมันได้อย่างไร?
ฉันเหนื่อย
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
ในviewWillAppear
วิธีการของตัวควบคุมมุมมองที่สามของฉัน แต่มันไม่ทำอะไรเลย นี่เป็นวิธีการโทรที่ไม่ถูกต้องหรืออาจจะเรียกผิดหรือฉันควรจะใช้วิธีที่แตกต่างออกไปโดยสิ้นเชิง?