1

我有一個tabBarController與2個選項卡。每個標籤內都有一個navigationController。每個navigationController有3個孩子viewControllers如何將新的視圖控制器從一個選項卡推送到另一個選項卡?

      tabBarController 
          /   \ 
         tabOne   tabTwo 
         /    \ 
        NumNavController  ColorNavController 
         |      | 
        ViewOne    ViewBlack 
         |      | 
        ViewTwo     ViewRed 
         |      | 
        ViewThree    ViewPurple//(beginning) 
               | 
              myButton 
           //myButton pushes on ViewOne>ViewTwo>ViewThree(end) 

我有內部ViewPurple一個按鈕,按下時,我想推ViewOne,ViewTwo,然後ViewThree。

(beginning)ViewPurple > ViewOne > ViewTwo > ViewThree(end) 

因此,從ViewThree我推回ViewPurple- 這就是我想要達到

(beginning)ViewPurple < ViewOne < ViewTwo < ViewThree(end) 

裏面ViewPurple我重置ColorNavController對NumNavController的孩子控制器。

let numVCs = [viewThreeVC, viewTwoVC, viewOneVC] 
self.navigationController?.setViewControllers(numVCs, animated: true) 
//Apple docs says to set them backwards 
//The view controllers to place in the stack. The front-to-back order of the controllers in this array represents the new bottom-to-top order of the controllers in the navigation stack. Thus, the last item added to the array becomes the top item of the navigation stack 

我遇到的問題是,一旦我推ViewOne並按回返回按鈕,而不是去ViewPurple我結束了在ViewTwo。它陷入了怪異的循環,它似乎不知道viewController的起始位置在哪裏。

//I can't push back to ViewPurple 
ViewOne < ViewTwo < ViewOne < ViewTwo < ViewThree(end) 

哪裏是問題,我怎麼回去ViewPurple?

ViewPurple:(第一種方式 - 沒有崩潰,但奇怪的循環)

class ViewPurple: UIViewController { 

@IBAction func myButton(sender: UIButton){ 
    self.presentNewVCs() 
    } 

func presentNewVCs(){ 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let viewOneVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewOne") as! ViewOneController 
    let viewTwoVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewTwo") as! ViewTwoController 
    let viewThreeVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewThree") as! ViewThreeController 

    let numVCs = [viewThreeVC, viewTwoVC, viewOneVC] 
    self.navigationController?.setViewControllers(numVCs, animated: true) 
    } 
} 

我也試圖呈現NumNavController第二種方式,但我一直得到一個異常'Application tried to present modally an active controller。我做了一個弱裁判ViewPurple並試圖DEINIT它,但它仍然墜毀

ViewPurple:(第二種方法 - 崩潰)

class ViewPurple: UIViewController { 

weak var parent:ViewPurple! 

@IBAction func myButton(sender: UIButton){ 
    self.presentNewVCs() 
    } 

func presentNewVCs(){ 

    let numNavController = self.tabBarController!.viewControllers![0] as! NumNavController 

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let viewOneVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewOne") as! ViewOneController 
    let viewTwoVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewTwo") as! ViewTwoController 
    let viewThreeVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewThree") as! ViewThreeController 

    let numVCs = [viewThreeVC, viewTwoVC, viewOneVC] 
    numNavController.setViewControllers(numVCs, animated: true) 
    self.presentViewController(numNavController, animated: true, completion: nil) 
    } 

    deinit{ 
    self.parent = nil 
    } 
} 
+0

爲什麼要一次插入三視圖控制器。你很好地解釋你的問題,但對我來說它不是100%可以理解的。 :( –

+0

@ Dheeraj D你是什麼意思?我想從PurpleVC去到一,二,三,我需要走過所有三條。你是說我沒必要那麼做嗎? –

+0

Create push segue從紫色視圖到ViewOne或者從紫色視圖創建模態segue到'NumNavController'。 –

回答

1

能否請更新您的buttonAction:

@IBAction func myButton(sender: UIButton){ 
    let viewOneVC = mainStoryboard.instantiateViewControllerWithIdentifier("ViewOne") as! ViewOneController 
    self.navigationController.pushViewController(viewOneVC, animate:true) 
} 
0

首先你可以不存在,NumNavController因爲這是已經tabBarController的一部分。

setViewControllers被稱之爲完全替代viewcontroller堆棧navigationViewController,所以你需要添加ViewPurplenumVCs數組中,並設置ViewPurple爲您的根視圖控制器。

那麼,在致電popToRootViewController將回到ViewPurple

+0

我從一開始就試過。什麼都沒發生。我沒有包括它。它永遠不會「彈出」 –

相關問題