开发中有没有遇上这样的一个需求,就是操作了几个好几个流程,也跳转了好几个页面了,但是最后的时候需要跳转回一个特定的页面,或者跳转去一个特定的页面。注意这里的“回”和“去”的区别,“回”的话意思就是说,你曾悄悄地从这里走过;“去”的话意思就是说,要你悄悄地前往那里。那么我们首先说说,回到曾经来过的地方,就是曾经跳转进来的控制器页面。
1、你曾悄悄地从这里走过的情况,即self.navigationController.viewControllers包含需要跳转回的控制器。
NSArray *vcsArr = self.navigationController.viewControllers;
for (UIViewController *controller in vcsArr) {
if ([controller isKindOfClass:[XMFViewController class]]) {
[self.navigationController popToViewController:controller animated:YES];
}
}
2、要你悄悄地前往那里的情况,即self.navigationController.viewControllers不包含需要跳转回的控制器,但是需要你跳转进去,而且不影响逻辑。
如下图所示,self.navigationController.viewControllers没有包含GBABankListViewController的控制器,但是我们的要求却是要跳转去这个页面
打印栈里的控制器那么就直接上我写的代码:
跳转去指定页面
NSArray *vcsArr = self.navigationController.viewControllers;
NSMutableArray *vcsMutArr = [[NSMutableArray alloc]initWithArray:vcsArr];
for (UIViewController *controller in vcsArr) {
if ([controller isKindOfClass:[GBAMyWalletViewController class]]) {
//创建要跳转去的控制器
GBABankListViewController *bankListVc = [[GBABankListViewController alloc]init];
//获取查找出来的控制器index
NSInteger index = [vcsMutArr indexOfObject:controller];
//把要跳转去的控制器插入数组
[vcsMutArr insertObject:bankListVc atIndex:index + 1];
//再次给self.navigationController.viewControllers赋值
[self.navigationController setViewControllers:vcsMutArr];
//跳转去控制器
[self.navigationController popToViewController:bankListVc animated:YES];
}
}
这里要注意一下为什么把GBAMyWalletViewController作为isKindOfClass的依据是因为进入GBABankListViewController后,返回的页面就是GBAMyWalletViewController,然后就可以啦!
如果以上的分享帮助到你了,欢迎分享,更欢迎赞赏,也可以直接打开支付宝、微信、QQ的扫一扫功能直接扫下面的支付宝、微信、QQ三合一打赏码进行打赏支持作者创作,感谢感谢!
小蜜蜂的多合一收款码欢迎和我交流,QQ:834537795(小蜜蜂)
网友评论