我可以更改调用presentViewController的ViewController吗?

时间:2013-10-17 23:22:12

标签: iphone ios ipad uiviewcontroller orientation

我有一个ViewController,VC1a,它呈现VC2:

VC1a - > presentViewController:VC2

是否可以将VC1a更改为VC1b,以便在调用dissmissViewControllerAnimated时,它会动画到VC1b而不是VC1a?

我问的原因是因为我想回到不同的屏幕,而不想让它回到VC1a。这与肖像/风景变化有关。

2 个答案:

答案 0 :(得分:0)

警告。对于您的用户而言,这可能是一个糟糕/令人困惑的UI选择。 但如果你必须......

您可以将VC1a置于UINavigationController内,并在VC2位于前台时修改导航堆栈。类似的东西:

// in VC1a.m

[self presentViewController:VC2 animated:YES completion:^{
    NSMutableArray *navigationStack = [[NSMutableArray alloc] init];
    for (UIViewController *viewController in self.navigationController.viewControllers)
    {
        if (viewController != self.navigationController.viewControllers.lastItem)
        {
            [navigationStack addObject:viewController];
        }
        else
        {
            VC1b *viewControllerToSwapIn = [[VC1b alloc] init];
            // probably some more initialization here
            [navigationStack addObject:viewControllerToSwapIn];
        }
    }
    self.navigationController.viewControllers = navigationStack;
}];

或者可能是一个更好的主意:

// in VC1a.m

[self presentViewController:VC2 animated:YES completion:^{
    VC1b *viewControllerToSwapIn = [[VC1b alloc] init];
    // probably some more initialization here
    [navigationStack addObject:viewControllerToSwapIn];

    [self.navigationController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:viewControllerToSwapIn animated:NO];
}];

答案 1 :(得分:0)

好的,我实现了一个带有两个孩子的Container视图控制器 - 一个用于纵向,一个用于横向,这解决了我的问题。

我花了几天时间试图弄清楚如何在iOS6中正确处理旋转,我没有意识到从UINavigationController推送时旋转UITableViewController有一个错误。

感谢@paulrehkugler的回复 - 当我问这个问题时,我非常绝望。从主视图中呈现UINav / TableViewControllers时,似乎没有任何关于如何处理方向更改的好例子。我当然不想实施这样的黑客攻击。