0
推视图控制器后后退按钮不回去
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"
但问题是,如果现在按导航栏中的后退按钮,它回到第二个屏幕。但是当后退按钮再次按下时,它只会停留在此屏幕上。它似乎通过我已经删除的所有屏幕,但不显示它们。
我在做什么错?
导航控制器的要点是将新控制器推入堆栈,并允许用户通过点击后退按钮返回堆栈。你永远不应该手动删除那些不再可见的。 从导航堆栈中移除控制器永远不会工作;你正在腐蚀它的内部状态,它肯定会变得无望地混淆。这也会产生糟糕的用户体验;人们期望导航能够以他们习惯的方式工作。 – davidf2281
@ davidf2281你错在认为它破坏了内部状态。过去我做得很成功。然而,您在强调应用程序的用户体验时非常正确。 – bsarrazin
我同意@ bensarz的建议。但是,根据acutal导航逻辑,使用'popToViewController:animated:'可能是一个选项。 –