個々の UIViewController をロードしている UINavigationController ベースのタブを多数表示する UITabBarController ベースのアプリがあります。
インターフェイスの回転をサポートするために、willRotateToInterfaceOrientation イベントと didRotateFromInterfaceOrientation イベントを、目に見える個別の UIViewController (UINavigationControllers のスタックの 1 つに含まれる) に次のように転送しようとしています。
// this is in my sub-classed UITabBarController
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
UIViewController *controller = self.selectedViewController;
// do not pass this to the More controller
if (controller == [self moreNavigationController]) return;
if ([controller isKindOfClass:[UINavigationController class]]) {
// although this is not the more controller, the count of view controllers is 0
// => this view has been pushed onto the moreNavigationController
if ( [(UINavigationController *)controller viewControllers]==nil || [[(UINavigationController *)controller viewControllers] count]==0 ) {
controller=[[self moreNavigationController] visibleViewController];
} else {
controller = [(UINavigationController *)controller visibleViewController];
}
}
[controller didRotateFromInterfaceOrientation:fromInterfaceOrientation];
}
コードの途中の部分の確認を求めています。「More」タブからアクセスされる個々の UIViewControllers は、設定した UINavigationController のスタックにプッシュされるのではなく、MoreNavigationController に直接プッシュされることに気付きました。その viewControllers 配列のカウントは 0 です。したがって、現在表示されている UIViewController を取得するには、MoreNavigationController から取得する必要があります。
私は正しいことをしていますか、それとも明らかな何かが欠けていますか?