У меня есть 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 и нажмите заднюю BackButton вместо того, чтобы идти к 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
}
}
Почему вы вставляете Три ViewController сразу. Вы попытались объяснить свою проблему, но для меня это не на 100% понятно. :( –
@ Dheeraj D Что вы имеете в виду? Я хочу перейти от PurpleVC к One, Two и Three. Мне нужно пройти все три. Вы говорите, что мне не нужно было это делать? –
Создать push segue от Purple View to ViewOne ИЛИ создавать Modal segue от Purple View до 'NumNavController'. –