2017-02-02 65 views
1

工作的要求是相當簡單的,繼承人一些代碼:去除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帖子,這段代碼不應該給任何問題。任何想法爲什麼它不工作?

+0

總之是,堆棧通常看起來像這樣:HomeController,DetailsViewController,ChoosePathViewController,VerificationController。我想彈出到DetailsViewController。但是,如果這樣做,我會看到ChoosePathViewController幾秒鐘,我不想要這個。因此,爲什麼我試圖從列表中刪除它 – user481610

+0

對不起,我在您寫下之前刪除了我的評論,我以爲我誤解了你,但似乎我理解了你。但是,我還沒有嘗試過這一行代碼,但是如果你有這個代碼,你是否閱讀過有關這方面的文檔? https://developer.apple.com/reference/uikit/uinavigationcontroller/1621861-setviewcontrollers?language=objc,我不確定「setViewControllers」是否與「setViewControllers:animated」一樣工作,你試過了嗎?如果它解決了你的問題,讓我知道我會更新答案。 –

+1

@Sneak該文檔解釋說,setViewControllers等同於調用setViewControllers:animated:將動畫參數設置爲NO。記住用objc foo.viewControllers = bar;可以寫成[foo setViewControllers:bar]; – Bamsworld

回答

0

我注意到你沒有中斷:if ([viewController isKindOfClass:[ChoosePathViewController class]]) {跳出循環。

難道是你將數組設置爲導航控制器,並在同一時間你彈出到DetailsViewController,這將使動畫奇怪?

編輯: 一個建議,爲什麼不創建一個NSMutableArray,並在樹中按照需要的順序添加viewController,在迭代過程中,並且在完成之後,只需運行「setViewControllers」方法用你的新的VC更新陣列?

相關問題