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

Posted

技术标签:

【中文标题】我可以更改调用 presentViewController 的 ViewController 吗?【英文标题】:Can I change the ViewController that calls presentViewController? 【发布时间】:2013-10-17 23:22:12 【问题描述】:

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

VC1a -> presentViewController: VC2

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

我问的原因是因为我想返回到另一个屏幕,而不是动画回到 VC1a。这与纵向/横向变化有关。

【问题讨论】:

我不知道为什么人们对这个问题给出了负面评价。当您在呈现的子视图控制器中旋转设备时,想要从父纵向视图切换到横向父视图有什么问题?? 【参考方案1】:

警告。对于您的用户来说,这可能是一个糟糕/令人困惑的 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];
];

【讨论】:

【参考方案2】:

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

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

感谢@paulrehkugler 的回复-当我问这个问题时,我变得非常绝望。当 UINav/TableViewControllers 从主视图呈现时,似乎没有任何很好的例子来说明如何处理方向变化。我当然不想实施这样的 hack。

【讨论】:

以上是关于我可以更改调用 presentViewController 的 ViewController 吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以检查是否由于方向更改而调用了 onCreate?

探查器可以更改递归调用在 Java 中运行的时间吗?

变量更改后调用事件

当从不同的类调用更改时,UIView IBOutlet 不会更改

使用spring-security更改方法调用的安全性上下文

如何格式化我的 Perl 代码,以便我可以从命令窗口更改我的调用并测试或不测试它?