Ios 从导航堆栈中删除viewController时出现问题
我正在制作一个演示,其中我必须从NavigationController中删除一些ViewController,为此我实现了下面的代码,但它给了我一个问题 我已经按下了VC1、VC2、VC3,现在我想按下VC4并移除VC2Ios 从导航堆栈中删除viewController时出现问题,ios,objective-c,uinavigationcontroller,pushviewcontroller,Ios,Objective C,Uinavigationcontroller,Pushviewcontroller,我正在制作一个演示,其中我必须从NavigationController中删除一些ViewController,为此我实现了下面的代码,但它给了我一个问题 我已经按下了VC1、VC2、VC3,现在我想按下VC4并移除VC2 ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil]; [self.navigationController pushViewController
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上运行良好,但在iOS7和VC2中,当我按下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 ;
以下是修复程序,在iOS7和iOS8中运行良好:
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
// Find the things to remove
NSMutableArray *toDelete = [NSMutableArray array];
for(UIViewController *objVC in viewControllers)
{
if([objVC isKindOfClass:[ViewController2 class]])
{
[toDelete addObject:objVC];
}
}
[viewControllers removeObjectsInArray:toDelete];
self.navigationController.viewControllers =viewControllers ;
ViewController4 *VC4=[[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self.navigationController pushViewController:VC4 animated:YES];
问题1:当您按下VC4或从VC4返回时,是否要删除VC2?问题2:当您从VC4返回时,VC2和VC3将从堆栈中删除,对吗?在您按下VC4后,你能记录导航堆栈中的所有视图控制器并检查堆栈中是否有VC4吗?回答1:我想在按下VC4后删除VC2。回答2:是的,当我从VC4按回键时,我直接来到VC1,因为我删除了VC2,VC3自动删除。Ans3:在按下VC4并移除VC2之后,我可以在NSLog中获得所需的堆栈VC1、VC3、VC4。即使在VIEW中,VC4的NSLog也会显示相同的日志,但在VIEWDID中,VC4仅打印VC1、VC4。谢谢!还可以检查我的第三条注释,以便在执行删除操作之前记录视图控制器