当设备方向改变时,切换到不同的View Controller

时间:2013-02-19 14:41:15

标签: objective-c uiviewcontroller uisplitviewcontroller uiinterfaceorientation uiwindow

我目前正在为iPad构建一个应用程序,其中视图结构完全不同,具体取决于设备方向。

当应用程序处于纵向状态时,我使用ECSlidingViewController库来支持左右滑动菜单(如facebook或path)。

当app处于横向状态时,我需要显示一个splitviewcontroller,以便左手菜单始终可见。

有人知道这个问题的最佳解决方案吗?

我已经尝试在检测到方向更改时更改UIWindow的RootViewController,但这会产生一些非常奇怪的结果....

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。有些比其他更好,但主要取决于您特定情况的需要。

  1. 如您在轮换期间提到的那样替换rootViewController
  2. 在纵向和横向之间轮换时,始终使用UISplitViewController并使用seguereplace替换detailViewController
  3. 使用/制作自定义容器视图控制器,使用addChildViewController:removeFromParentViewController:
  4. 在轮换时添加/删除相应的视图控制器

    非常粗略的选择3。

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        [self.childViewControllers[0].view removeFromSuperView];
        [self.childViewControllers[0] removeFromParentViewController];
    
        if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
            [self addChildViewController:portraitVC];
            [self.view addSubview:portraitVC.view];
        } else {
            [self addChildViewController:landscapeVC];
            [self.view addSubview:landscapeVC.view];
        }
    }
    

    从你所说的,我猜选项3将是最合适的。尽管如此,我并不完全相信你需要切换视图控制器,但我不熟悉ECSlidingViewController及其提供的内容所以我无法确定。