隐藏VC并从之前的VC转移到新VC?

时间:2018-03-23 06:56:39

标签: ios objective-c segue viewcontroller

我想隐藏堆栈顶部的ViewController说VC。然后,VC下面的VC必须进入新的VC。取消隐藏之前隐藏的VC到segue堆栈的顶部。我怎么能实现这个?

即,我想说的是:

Segue Stack initial - > VC1 - > VC2

然后隐藏VC2并从VC1中删除 - > VC3

然后在它上面显示VC2。

Final Segue Stack - > VC1 - > VC3 - > VC2

3 个答案:

答案 0 :(得分:0)

你可以做这样的事情

在VC2中,您可以解除VC2并将VC3推送到这样的堆栈

self.dismiss(animated: true) {
    self.navigationController?.pushViewController(VC3, animated: true)
}

你可以在VC3加载时推送VC2

答案 1 :(得分:0)

您可以通过操纵 navigationController.viewController 属性来实现它。看看如何..

例如,您想要从您执行的堆栈中删除ViewController ..

NSMutableArray *newStack=[[NSMutableArray alloc] init];

for(id controller in self.navigationController.viewControllers){
    if(![controller isKindOfClass:[YourViewControllerToRemove class]]){
         [newStack addObject:controller];
    }
}

最后将数组分配为

self.navigationController.viewControllers=newStack;

将删除不在阵列中的控制器。

现在,当你想添加时,只需使用

[self.navigationController pushViewController:<YourViewController> animated:YES];

注意:检查已删除的ViewController deallocs。

干杯。

答案 2 :(得分:0)

UINavigationController的方法setViewControllers(:animated:)

怎么样?
let viewList: [UIViewController] = [V1, V2]
self.navigationController?.setViewControllers(viewList, animated: true)


更新

V1, V2是类的实例。它们是从故事板或代码创建的。如果它们已经存在于UINavigationController的堆栈中,则可以从UINavigationController.的{​​{3}}属性中解析它们

let list = self.navigationController?.viewControllers
for v in list {
    // if v is V1 or V2 ....
}

我写了一个示例项目viewControllers