UINavigationController
드릴 다운 인터페이스를 표시하기 위해 를 사용하는 iPhone 앱이 있습니다. 먼저 하나의보기, 다른 하나는 최대 4 단계 깊이입니다. 처음 세보기는 세로 방향으로 제한하고 마지막보기 만 가로로 회전하도록 허용해야합니다. 네 번째보기에서 세 번째보기로 돌아가고 네 번째보기는 가로 방향으로 돌아 갔을 때 모든 것이 다시 세로로 회전하기를 원합니다.
iOS 5에서는 shouldAutorotateToInterfaceOrientation:
허용 가능한 방향에 대해 YES를 반환하도록 각 뷰 컨트롤러에서 간단히 정의 했습니다. 뷰 컨트롤러 # 4에서 # 3으로 돌아올 때 장치가 가로 방향으로 유지 되더라도 세로로 돌아가는 것을 포함하여 모든 것이 위에서 설명한대로 작동했습니다.
iOS 6에서는 모든 뷰 컨트롤러가 가로 방향으로 회전하여 의도하지 않은 컨트롤러를 깨뜨립니다. iOS 6 릴리스 노트에는
더 많은 책임이 앱과 앱 델리게이트로 이동하고 있습니다. 이제 iOS 컨테이너 (예
UINavigationController
:)는 자동 회전 여부를 결정하기 위해 자녀에게 문의하지 않습니다. [...] 시스템은 장치가 회전 할 때마다 또는 뷰 컨트롤러가 전체 화면 모달 프레젠테이션 스타일로 표시 될 때마다 지원되는 인터페이스 방향에 대해 최상위 전체 화면 뷰 컨트롤러 (일반적으로 루트 뷰 컨트롤러)에 요청합니다. 또한이 뷰 컨트롤러가shouldAutorotate
메서드 에서 YES를 반환하는 경우에만 지원되는 방향이 검색됩니다 . [...] 시스템은 앱의supportedInterfaceOrientationsForWindow:
메서드에서 반환 된 값을supportedInterfaceOrientations
최상위 전체 화면 컨트롤러 의 메서드에서 반환 한 값과 교차하여 방향이 지원되는지 여부를 결정합니다 .
나는 서브 클래스 그래서 UINavigationController
내 준 MainNavigationController
부울 속성을 landscapeOK
하고있는 허용 방향을 반환하려면이 옵션을 사용 supportedInterfaceOrientations
. 그런 다음 각 뷰 컨트롤러의 viewWillAppear:
메서드에 다음 과 같은 줄이 있습니다.
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
MainNavigationController
원하는 행동 을 알려 줍니다.
여기에 질문이 있습니다. 이제 세로 모드에서 네 번째보기로 이동하고 전화기를 뒤집 으면 가로로 회전합니다. 이제 뒤로 버튼을 눌러 세로로만 작동해야하는 세 번째보기로 돌아갑니다. 그러나 그것은 뒤로 회전하지 않습니다. 그렇게하려면 어떻게해야합니까?
나는 시도했다
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
viewWillAppear
내 세 번째 뷰 컨트롤러 의 방법에 있지만 아무것도하지 않습니다. 이것이 잘못된 호출 방법입니까, 아니면 호출하기에 잘못된 곳입니까, 아니면 완전히 다른 방식으로 전체를 구현해야합니까?