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:'可能是一個選項。 –