多层presentingViewController跳转返回处理

!!!最近项目使用多层presentViewController跳转

[A presentViewController: B animated: YES]
[B presentViewController: C animated: YES]
......

问题所在:C如何直接回到A?

最开始没查找资料直接写的代理方法,在C里面写个协议,B来遵守

方案合集1

//在C里需要回到A的地方调用下面代码

  [self dismissViewControllerAnimated:YES completion:^{
        if ([self.delegate respondsToSelector:@selector(dismissVC)]) {
             [self.delegate dismissVC];
           }
    }];

//在B里面遵循协议,并实现方法,这样B就消失了,此时页面就停在了A

[self dismissViewControllerAnimated:YES completion:nil];

总结:这个方法能够回到A但是中间会看到B界面,也就是说是一层一层回到A的,当然停留B的时间比较短,但是对于有UI强迫症的人来说就接受不了了,别急,往下看.

方案合集2

   UIViewController *rootVC = self.presentingViewController;
    while (rootVC.presentingViewController) {

      rootVC = rootVC.presentingViewController;
         
                                     }
    [rootVC dismissViewControllerAnimated:YES completion:nil];

这里大家需要明白的地方:
B.presentingViewController = A;
A.presentedViewController = B;

总结: 此方法能够一步到位,直接就回到了最顶层的vc

方案合集3

返回到自己想要返回的层级VC
ABC顺序跳转
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

假如你有ABCD顺序的跳转
[self.presentingViewController.presentingViewController .presentingViewController dismissViewControllerAnimated:YES completion:nil];

记录开发的点滴,你我共同进步,加油!!!

你可能感兴趣的:(多层presentingViewController跳转返回处理)