我想隐藏堆栈顶部的ViewController说VC。然后,VC下面的VC必须进入新的VC。取消隐藏之前隐藏的VC到segue堆栈的顶部。我怎么能实现这个?
即,我想说的是:
Segue Stack initial - > VC1 - > VC2
然后隐藏VC2并从VC1中删除 - > VC3
然后在它上面显示VC2。
Final Segue Stack - > VC1 - > VC3 - > VC2
答案 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。