UINavigationController
Detaya inme arayüzü sunmak için a kullanan bir iPhone uygulamam var : İlk olarak bir görünüm, sonra diğeri, dört seviyeye kadar derinlik. İlk üç görünümün dikey yönelimle sınırlandırılmasını ve yalnızca son görüntünün yataya döndürülmesine izin verilmesini istiyorum. Dördüncü görünümden üçüncü ve dördüncü görünüm yatay yöndeyken döndüğümde, her şeyin tekrar portreye dönmesini istiyorum.
İOS 5'te shouldAutorotateToInterfaceOrientation:
, izin verilen yönler için EVET'i döndürmek için görünüm denetleyicilerimin her birinde tanımladım . Her şey yukarıda açıklandığı gibi çalıştı, cihaz yatay yönde 4 numaralı denetleyiciden 3 numaralı düzeye dönüldüğünde bile portreye dönüş dahil.
İOS 6'da tüm görünüm denetleyicileri, amaçlanmayanları bozarak yatay konuma döner. İOS 6 sürüm notları şunu söylüyor:
Daha fazla sorumluluk, uygulamaya ve uygulama temsilcisine taşınmaktır. Artık iOS kapsayıcıları (gibi
UINavigationController
), otomatik döndürme yapmaları gerekip gerekmediğini belirlemek için çocuklarına danışmıyor. [...] Sistem, aygıt döndüğünde veya tam ekran modal sunum stiliyle bir görünüm denetleyicisi sunulduğunda, en üstteki tam ekran görünüm denetleyicisinden (genellikle kök görünüm denetleyicisinden) desteklenen arabirim yönlerini ister. Ayrıca, desteklenen yönler yalnızca bu görünüm denetleyicisishouldAutorotate
yönteminden YES döndürürse alınır . [...] Sistem, uygulamanınsupportedInterfaceOrientationsForWindow:
yöntemi tarafından döndürülen değerlesupportedInterfaceOrientations
en üstteki tam ekran denetleyicinin yönteminin döndürdüğü değerle kesişerek bir yönün desteklenip desteklenmediğini belirler .
Bu yüzden alt sınıfa ayırdım UINavigationController
, MainNavigationController
bir boole özelliği verdim landscapeOK
ve izin verilen yönelimleri döndürmek için bunu kullandım supportedInterfaceOrientations
. Sonra her bir görünüm denetleyicilerimin viewWillAppear:
yöntemlerinde buna benzer bir satır var
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
bana MainNavigationController
istenen davranışı anlatmak için.
İşte soru geliyor: Şimdi dikey modda dördüncü görünümüme gidersem ve telefonu ters çevirirsem, yatay konuma döner. Şimdi sadece portre çalışması gereken üçüncü görünüme dönmek için geri düğmesine basıyorum. Ama geri dönmüyor. Bunu nasıl yapmasını sağlarım?
denedim
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
içinde viewWillAppear
benim üçüncü görünümü denetleyicisi yöntemine, ancak hiçbir şey yapmaz. Bu, aramak için yanlış bir yöntem mi yoksa onu aramak için yanlış bir yer mi yoksa her şeyi tamamen farklı bir şekilde mi uygulamalıyım?