从层次结构中删除前一个视图控制器

Posted

技术标签:

【中文标题】从层次结构中删除前一个视图控制器【英文标题】:remove previous view controller from hierarchy 【发布时间】:2014-10-02 11:19:12 【问题描述】:

当我按下导航栏中的返回按钮时,我正在尝试跳过一个 ViewController

当我去下一个 VC 时,它需要这样做:

A -> B -> C

但是当我想从 C 中返回时,我想呈现 A ViewController

C -> A

我设法用下一个代码做到了:

    NSMutableArray *newControllers = [[NSMutableArray alloc]initWithArray:controllers];
    [newControllers removeObjectAtIndex:newControllers.count-2];
    self.navigationController.viewControllers = newControllers;

问题是显示的导航栏。当我从 A ViewController 获取 View 时,会出现来自 B ViewController 的导航栏。

有什么方法可以像从层次结构中删除视图控制器一样删除导航栏项目?

【问题讨论】:

【参考方案1】:
UIViewController *vcPop = nil;  
for (UIViewController *viewContrl in self.navigationController.viewControllers) 
   if ([viewContrl class] == [YOUR POP VIEW CONTROLLER class]) 
       vcPop = (YOUR POP VIEW CONTROLLER  *)viewContrl;
       break;
 

if(vcPop)
   [self.navigationController popToViewController:vcPop animated:YES];

【讨论】:

是的,这就是我要找的...非常感谢!

以上是关于从层次结构中删除前一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

自定义转换后,搜索栏从视图层次结构中删除

如何从任何其他视图控制器获取具有视图控制器详细信息的视图层次结构?

直接从任何地方呈现深度嵌套的视图控制器,同时保留层次结构

如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS

加载一个视图控制器,然后从内存中删除前一个

使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图