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

你可能感兴趣的:(ios 页面随意跳转, pop页面随意.出栈入栈,跳转到不是从哪个页面进入的)