2017-09-01 3 views
1

J'essaie d'imiter la logique de navigation dans l'application Apple par défaut "Photos". Voici l'illustration de la logique de navigation de l'application.Comment démarrer à partir d'une scène NavigationController non-initiale

enter image description here

Lorsque vous démarrez l'application, vous atterrissez sur « Moments » vue qui est au troisième niveau hiérarchique le plus élevé dans l'application. C'est assez intéressant car tout l'onglet "Photos" semble être intégré dans un seul NavigationController. Cependant, si toutes les scènes sont intégrées dans un seul contrôleur de navigation, comment commencer à partir d'une scène non-initiale?

Voici mon application hackish sans scènes intégrer dans une NavigationController (tous les enchaînements sont présentés comme show: enter image description here

Il en résulte le comportement que je voulais, mais je ne suis pas sûr de la question de la mémoire que j'allouons nouvelle. VCs chaque boucle? Et le story-board ne regardent pas juste.

en guise de réponse, une simple capture storyboard avec brève explication serait bien.

+1

en utilisant 'UINavigationController' vous pouvez définir le tableau' .viewControllers' = à votre '[firstViewController, SecondViewController, DesiredInitialViewController]' –

+1

Vous pouvez le faire programatically, peut être cette une solution pour vous? –

+0

Mon application est faite avec storyboard et je veux être cohérent dans les méthodes et les styles. Est-ce que ce n'est pas possible de le faire dans les storyboards? – YOUNG

Répondre

2

Comme je l'ai dit dans mes commentaires que vous devez modifier le .viewControllers propriété de votre UINavigationController vous pouvez le faire en utilisant setViewControllers(_:animated:) méthode ou modifier directement .viewControllers propriété où rootViewController sera le viewControllersArray[0] et topViewController sera viewControllersArray[count-1]

Cette description de la propriété et les détails peuvent être fondée dans la documentation UINavigationController

viewControllers 

Propriété

Les contrôleurs de vue actuellement sur la pile de navigation.

Déclaration SWIFT

var viewControllers: [UIViewController] 

Discussion Le contrôleur de vue racine est à l'index 0 dans la matrice, le contrôleur de vue arrière est à l'indice n-2, et la Le contrôleur supérieur est à index n-1, où n est le nombre d'éléments dans le tableau.

L'attribution d'un nouveau tableau de contrôleurs de vue à cette propriété équivaut à en appelant la méthode setViewControllers: animated: avec le paramètre animé défini sur false.

exemple

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
    let firstViewController = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as? FirstViewController 
    let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController 
    let thirdViewController = storyboard.instantiateViewController(withIdentifier: "ThirdViewController") as? ThirdViewController 

    self.navigationController?.setViewControllers([firstViewController,secondViewController,thirdViewController], animated: false)