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 и нажмите заднюю 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 
    } 
} 
+0

Почему вы вставляете Три ViewController сразу. Вы попытались объяснить свою проблему, но для меня это не на 100% понятно. :( –

+0

@ Dheeraj D Что вы имеете в виду? Я хочу перейти от PurpleVC к One, Two и Three. Мне нужно пройти все три. Вы говорите, что мне не нужно было это делать? –

+0

Создать push segue от Purple View to ViewOne ИЛИ создавать Modal segue от Purple View до '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 поэтому вам нужно добавить ViewPurple также в numVCs массив и установить ViewPurple в качестве контроллера представления корня.

Итак, при звонке popToRootViewController вернется к ViewPurple.

+0

Я пробовал это с самого начала. Ничего не произошло. Я не включил его. Он никогда не «выскочил», –

Смежные вопросы