我有一個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
}
}
爲什麼要一次插入三視圖控制器。你很好地解釋你的問題,但對我來說它不是100%可以理解的。 :( –
@ Dheeraj D你是什麼意思?我想從PurpleVC去到一,二,三,我需要走過所有三條。你是說我沒必要那麼做嗎? –
Create push segue從紫色視圖到ViewOne或者從紫色視圖創建模態segue到'NumNavController'。 –