2

我有一个基于 UITabBarController 的应用程序,它显示了许多基于 UINavigationController 的选项卡,我正在将各个 UIViewControllers 加载到这些选项卡上。

为了支持界面旋转,我试图将 willRotateToInterfaceOrientation 和 didRotateFromInterfaceOrientation 事件转发到我可见的个人 UIViewController(它是 UINavigationControllers 堆栈之一的一部分),如下所示:

// 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];

}

我正在寻求对代码中间部分的确认。我注意到通过“更多”选项卡访问的各个 UIViewController不会推送到我设置的 UINavigationController 的堆栈上,而是直接推送到 MoreNavigationController 上,尽管 self.selectedViewController 返回我的 UINavigationController(而不是 MoreNavigationController),它的 viewControllers 数组的计数为 0。因此,为了获取当前显示的 UIViewController,我需要从 MoreNavigationController 中获取它。

我是在做正确的事,还是我遗漏了一些明显的东西?

4

0 回答 0