从modal VC中解脱出来

时间:2014-09-21 12:55:39

标签: ios objective-c ios8 xcode6

我有以下应用程序结构:

[root VC] tabbar -> nvc1 -> vc1 -> vc2 -> [modal formsheet] nvc2 -> vc3

我想要的是从vc3放松到vc2。基本上vc2模态地呈现nvc2控制器。

我将调用链记录到viewControllerForUnwindSegueAction:fromViewController:withSender

  1. vc3来电nvc2
  2. nvc2来电tabbar
  3. 所以我看到的是展开机制仅向上遍历,但呈现nvc2 - vc2的原始控制器位于tabbar > nvc1

    之内

    如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

与我之前看到的其他实现不同,canPerformUnwindSegueAction无法可靠地用于在容器控制器包含其他容器控制器的层次结构中查找目标控制器。

另外,我使用viewControllerForUnwindSegueAction:向下钻取道路以找到目标控制器。

值得注意的是,它与iOS 8.0相关。 iOS 7.1可以非常快速地找到目标VC,甚至不需要标签栏。

- (UIViewController*)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender {
    for(UIViewController* vc in self.viewControllers) {
        // check if controller itself handles unwinding
        if([vc canPerformUnwindSegueAction:action fromViewController:fromViewController withSender:sender]) {
            return vc;
        }

        // check if any child controller wants to handle this
        UIViewController* childVC = [vc viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];

        if(childVC) {
            return childVC;
        }
    }

    return [super viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];
}