Saya memiliki aplikasi iPhone yang menggunakan UINavigationController
untuk menampilkan antarmuka lihat perincian: Pertama satu tampilan, lalu tampilan lainnya, hingga empat tingkat. Saya ingin tiga tampilan pertama dibatasi pada orientasi potret dan hanya tampilan terakhir yang diperbolehkan untuk memutar ke lanskap. Saat kembali dari tampilan keempat ke tampilan ketiga dan keempat dalam orientasi lanskap, saya ingin semuanya berputar kembali ke potret.
Di iOS 5 saya cukup menentukan shouldAutorotateToInterfaceOrientation:
di setiap pengontrol tampilan saya untuk mengembalikan YA untuk orientasi yang diizinkan. Semuanya bekerja seperti yang dijelaskan di atas, termasuk kembali ke potret meskipun perangkat sedang dipegang dalam orientasi lanskap saat kembali dari pengontrol tampilan # 4 ke # 3.
Di iOS 6 semua pengontrol tampilan berputar ke lanskap, melanggar yang tidak dimaksudkan. Catatan rilis iOS 6 mengatakan
Tanggung jawab lebih besar berpindah ke aplikasi dan delegasi aplikasi. Sekarang, penampung iOS (seperti
UINavigationController
) tidak berkonsultasi dengan anaknya untuk menentukan apakah mereka harus melakukan rotasi otomatis. [...] Sistem meminta pengontrol tampilan layar penuh paling atas (biasanya pengontrol tampilan root) untuk orientasi antarmuka yang didukung setiap kali perangkat berputar atau setiap kali pengontrol tampilan disajikan dengan gaya presentasi modal layar penuh. Selain itu, orientasi yang didukung diambil hanya jika pengontrol tampilan ini mengembalikan YA darishouldAutorotate
metodenya. [...] Sistem menentukan apakah suatu orientasi didukung dengan memotong nilai yang dikembalikan oleh metode aplikasisupportedInterfaceOrientationsForWindow:
dengan nilai yang dikembalikan olehsupportedInterfaceOrientations
metode pengontrol layar penuh paling atas.
Jadi saya membuat subclass UINavigationController
, memberikan MainNavigationController
properti boolean saya landscapeOK
dan menggunakan ini untuk mengembalikan orientasi yang diizinkan masuk supportedInterfaceOrientations
. Kemudian di setiap viewWillAppear:
metode pengontrol tampilan saya, saya memiliki garis seperti ini
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
untuk memberi tahu saya MainNavigationController
perilaku yang diinginkan.
Inilah pertanyaannya: Jika saya sekarang menavigasi ke tampilan keempat saya dalam mode potret dan membalikkan telepon itu berputar ke lanskap. Sekarang saya menekan tombol kembali untuk kembali ke tampilan ketiga saya yang seharusnya hanya berfungsi potret. Tapi itu tidak berputar kembali. Bagaimana cara membuatnya melakukan itu?
Saya mencoba
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
dalam viewWillAppear
metode pengontrol tampilan ketiga saya, tetapi tidak melakukan apa-apa. Apakah ini metode yang salah untuk menelepon atau mungkin tempat yang salah untuk menyebutnya atau haruskah saya menerapkan semuanya dengan cara yang sama sekali berbeda?