使用此代码推送ViewController后
UIViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"frontCardViewController"];
[self.navigationController pushViewController:vc animated:YES];
我使用此代码删除了我不再需要的所有ViewControllers
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
NSArray *array = [[NSArray alloc] initWithArray:navigationArray];
for (UIViewController *viewController in array) {
if ([viewController isKindOfClass:[RITCardViewController class]]) {
RSLog(@"Is kind of Class RITCardViewController");
[navigationArray removeObject:viewController];
}
}
self.navigationController.viewControllers = navigationArray;
导航阵列现在看起来像这样:
"RITMainViewController: 0x10d81fc1>",
"RITDetailViewController: 0x10d847880",
"RITTestResultViewController: 0x113d0e090"
但问题是如果现在按下导航栏中的后退按钮,它会返回到第二个屏幕。但是当再次按下后退按钮时,它只会停留在此屏幕上。它似乎已经移除了我删除的所有屏幕,但没有显示它们。
我做错了什么?
答案 0 :(得分:3)
尝试这样的事情:
NSMutableArray *viewControllers = [@[] mutableCopy];
for (UIViewController *vc in self.nagivationController.viewControllers)
{
if (NO == [vc isKindOfClass:[RITCardViewController class]])
[viewControllers addObject:vc];
}
self.navigationController.viewControllers = viewControllers;
通过从视图控制器阵列中删除当前所在的视图控制器,确保不会损坏堆栈。假设您当前的视图控制器不是RITCardViewController
的实例,那么您应该没问题。否则,您必须在代码中弥补它。