工作的要求是相當簡單的,繼承人一些代碼:去除UINavigation特定視圖控制器堆棧不在iOS的
- (void)returnToDetailsScreen {
UINavigationController *mainNavController = self.navigationController;
NSArray *reversedViewControllers = [[mainNavController.viewControllers reverseObjectEnumerator] allObjects];
for (UIViewController *viewController in reversedViewControllers) {
if ([viewController isKindOfClass:[DetailsViewController class]]) {
[mainNavController popToViewController:viewController animated:YES];
return;
}
if ([viewController isKindOfClass:[ChoosePathViewController class]]) {
NSMutableArray *amendedViewControllerStack = [NSMutableArray arrayWithArray:[mainNavController viewControllers]];
[amendedViewControllerStack removeObject:viewController];
[mainNavController setViewControllers:amendedViewControllerStack];
}
}
}
總之一切我想要做的是兩兩件事,遍歷我想給viewControllers時或者,當我找到DetailsViewController
彈出到屏幕上,並且如果我找到ChoosePathViewController
我想從viewController列表中刪除它。然而,amendedViewControllerStack
刪除ChoosePathViewController
,但[mainNavController setViewControllers:amendedViewControllerStack];
永遠不會實際更新navigationController
viewControllers。
我檢查過幾個SO帖子,這段代碼不應該給任何問題。任何想法爲什麼它不工作?
總之是,堆棧通常看起來像這樣:HomeController,DetailsViewController,ChoosePathViewController,VerificationController。我想彈出到DetailsViewController。但是,如果這樣做,我會看到ChoosePathViewController幾秒鐘,我不想要這個。因此,爲什麼我試圖從列表中刪除它 – user481610
對不起,我在您寫下之前刪除了我的評論,我以爲我誤解了你,但似乎我理解了你。但是,我還沒有嘗試過這一行代碼,但是如果你有這個代碼,你是否閱讀過有關這方面的文檔? https://developer.apple.com/reference/uikit/uinavigationcontroller/1621861-setviewcontrollers?language=objc,我不確定「setViewControllers」是否與「setViewControllers:animated」一樣工作,你試過了嗎?如果它解決了你的問題,讓我知道我會更新答案。 –
@Sneak該文檔解釋說,setViewControllers等同於調用setViewControllers:animated:將動畫參數設置爲NO。記住用objc foo.viewControllers = bar;可以寫成[foo setViewControllers:bar]; – Bamsworld