您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页ios 页面随意跳转, pop页面随意.出栈入栈,跳转到不是从哪

ios 页面随意跳转, pop页面随意.出栈入栈,跳转到不是从哪

来源:二三娱乐

pop到界面栈中存在的某个界面
对于iOS中的界面栈,我们需要有一个明确的认识。界面不断push的过程,其实就是界面不断入栈的过程,当前显示的界面,就是栈顶界面。界面pop的过程,就是界面不断出栈的过程,出栈后的界面也就不可见了。可见的永远都是栈顶界面。系统默认的返回键或者pop方法都是返回到上一个界面。但是在实际开发中,我们有这样的需求,我们需要pop到隔着好几个界面的前面某个界面,那么应该怎么做呢?

//判断前面有没有SecondViewController,有的话pop到SecondViewController页面,否则不进行跳转  
  NSArray *vcArray = self.navigationController.viewControllers;


    for(UIViewController *vc in vcArray)
    {
        if ([vc isKindOfClass:[SecondViewController class]])
        {
            [self.navigationController popToViewController:vc animated:YES];
        }
    }  

重构界面栈,pop到之前不存在的界面
为什么要重构界面栈?在实际开发中会遇到这样的情况,在某几个界面间是一个死循环,在进行跳转的时候不断在几个界面间push,然后同样一个界面就会在栈中出现很多次,虽然这些栈都是不同的实例,但是这样完全没有必要。栈中界面越来越多,难道不会影响性能吗?并且默认有这样的准则:一个VC在栈中只有一个。所以,在必要时候,我们不要老是push,如果一个界面已经出现过,我们可以尝试pop。甚至没有出现过,我们可以在栈中插入一个界面,然后pop到该界面。这是为了从性能上去考虑,我们要不断维护界面栈。界面栈其实就是一个数组,插入删除操作非常方便,但是同样要提高警惕,容易造成crash

 *  这里的需求是,判断我的界面栈前面有没有FirstViewController,如果有的话,在FirstViewController后面插入一个InsertViewController,然后从当前界面pop到InsertViewController,InsertViewController可以pop到FirstViewController。 

 NSMutableArray *pageArray = [self.navigationController.viewControllers mutableCopy];
    for (int i = 0; i<pageArray.count; i++) {
        id vc = pageArray[i];
        if ([vc isKindOfClass:[ViewController class]]) {
            InserViewController *inser = [[InserViewController alloc] init];
            [pageArray insertObject:inser atIndex:i+1];
           [ self.navigationController setViewControllers:pageArray animated:NO];
            inser.hidesBottomBarWhenPushed = YES;
            [self.navigationController popToViewController:inser animated:YES];


        }
    }

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务