时间紧迫,写一些 NavigationController 一次性返回2级界面甚至更多级的界面

在NavigationController中,调用pushViewController可以将界面推到指定的界面,调用popToViewController可以返回上层界面,可是它的实现原理是什么?

好吧,说到原理,就要看源码,可是源码被封装了,看不到,那就不谈原理,那就谈谈 它为什么知道你pop的是上一层的viewcontroller,而不是别的呢?在Navigationcontroller的属性列表中,我们可以发现一个属性:viewControllers ,对,就是它! 它将你所有push的viewcontroller 全部装进,然后通过索引来找到你要pop的viewcontroller。

如果当前界面在viewControllers 中的索引是 3,那么popToViewController(返回上层界面) 只是 拿到索引是2的vc。

知道这个原理,那么我们不就可以为所欲为的返回到指定界面了吗?

来一个返回2级界面的代码:

 //当前vc 在数组中的索引
                NSInteger index=[kAPPDELEGATE.navigationController.viewControllers indexOfObject:self];
                //退出成功  获取素组中 当前索引-2 的viewcontroller,然后popTo指定vc
                [kAPPDELEGATE.navigationController popToViewController:[kAPPDELEGATE.navigationController.viewControllers getObjectAtIndex:index-2] animated:YES];
原文地址:https://www.cnblogs.com/niit-soft-518/p/4724353.html