2

個々の 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 から取得する必要があります。

私は正しいことをしていますか、それとも明らかな何かが欠けていますか?

4

0 に答える 0