iOS开发知识小集iOS学习开发

iOS中跳转去一个特定的界面 - self.navigation

2019-10-09  本文已影响0人  小蜜蜂Bee

开发中有没有遇上这样的一个需求,就是操作了几个好几个流程,也跳转了好几个页面了,但是最后的时候需要跳转回一个特定的页面,或者跳转去一个特定的页面。注意这里的“回”和“去”的区别,“回”的话意思就是说,你曾悄悄地从这里走过;“去”的话意思就是说,要你悄悄地前往那里。那么我们首先说说,回到曾经来过的地方,就是曾经跳转进来的控制器页面。

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(小蜜蜂)

上一篇下一篇

猜你喜欢

热点阅读