【发布时间】:2015-05-31 13:42:51
【问题描述】:
我正在制作演示,其中我必须从 NavigationController 中删除一些 viewController,为此我已经在下面的代码中实现了,但它给了我问题。
我已经推送了 VC1,VC2,VC3,现在我想推送 VC4 并移除 VC2...
ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
for(UIViewController *objVC in viewControllers)
{
if([objVC isKindOfClass:[ViewController2 class]])
{
[viewControllers removeObjectIdenticalTo:objVC];
}
}
self.navigationController.viewControllers =viewControllers ;
此代码适用于 iOS8,但在带有 VC2 的 iOS7 中,当我在 VC4 中按下后退按钮时,VC3 也会自动删除。 即使我把代码放在下面,控制器也会自动从堆栈中删除。
ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
self.navigationController.viewControllers =viewControllers ;
【问题讨论】:
-
问题一:你是在推VC4的时候还是从VC4回来的时候删除VC2?
-
问题 2:当你从 VC4 回来时,VC2 和 VC3 从堆栈中移除,对吗?
-
在你推送 VC4 之后,你能把所有的视图控制器都记录在导航堆栈中并检查堆栈中是否有 VC4 吗?
-
Ans1 : 我想在推 VC4 后删除 VC2。 Ans2:是的,当我从 VC4 按下返回时,我直接来到 VC1,因为我删除了 VC2,VC3 自动删除。 Ans3:在推送 VC4 并删除 VC2 后,我可以在 NSLog 中获得所需的堆栈 VC1、VC3、VC4。即使在 VC4 NSLog 的 viewWillAppear 中也是一样的,但是在 VC4 的 viewDidAppear 中它只打印 VC1,VC4。
-
谢谢!还可以检查我的第三条评论,在执行删除操作之前记录视图控制器
标签: ios objective-c uinavigationcontroller pushviewcontroller