2017-01-29 2 views
0

Il peut être une question de débutant - j'ai un flux que je crée dans délégué application le réglage de la première fenêtre une NavigationController comme ci-dessous:Retirez tous les navigationControllers de pile et de créer un nouveau réglage de flux de navigation nouvelle fenêtre - les meilleures pratiques

let window = UIWindow(frame: UIScreen.main.bounds) 
let root = SplashViewController(nibName: "SplashViewController", bundle: nil) 
window.rootViewController = UINavigationController(rootViewController: root) 
window.makeKeyAndVisible() 

self.window = window 

ce SplashViewController est une racine de mon premier flux (Tutorial, signin et inscription) et pour chacun d'eux, je crée un nouveau navControll (modal, etc.)

la chose est: quand ce flux est fait, l'utilisateur entrer dans le HomeViewController - Ici, je dois nettoyer les choses. Retirer mon ancien flux du tas pour tout faire OK pour «démarrer» l'application.

J'ai cherché et beaucoup de gens utilisent pour créer une nouvelle fenêtre appelant le singleton AppDelegate - Est-ce une bonne pratique? (J'ai essayé mais mon Splash reste là) - en passant, je joue une vidéo sur ce Splash comme arrière-plan.

J'ai également essayé de faire une notification pour écarter mon flux, mais mon Splash est toujours là. Faites-moi savoir si vous avez besoin de plus de contexte.

Appréciez toute aide! Merci d'avance!

Répondre

1

La façon la plus simple à définir en fonction AppDelegate comme

func changeRootToNewVC() { 
    let newRoot = NewViewController(nibName: "NewViewController", bundle: nil) 
    self.window?.rootViewController = newRoot 
} 

Cela changera RootViewController de la fenêtre en cours. Cela suffit, vous n'avez pas besoin de créer un nouvel objet Window.

+0

Salut @Dzmitry, merci pour votre réponse! Donc, si je crée cette fonction o mon AppDelegate et l'appelle, doit faire l'affaire? Cela supprimera-t-il les autres viewControllers (et navControllers) de la pile? Je vais essayer ici .. Je veux juste savoir si j'ai besoin de faire quelque chose d'autre .. – Gehlen

+0

@Gehlen Oui c'est tout ce que vous devez faire. Mais il y a plusieurs problèmes sur rdar à propos des bogues iOS lors de la configuration de rootViewController de cette façon. Donc, je suggère de vérifier que la pile de vos vues est ressentie correctement. Si aucune solution de contournement possible que j'utilise parfois est de créer votre propre contrôleur de conteneur qui est utilisé comme rootViewController par défaut et présentant tous les autres VC dans votre application. Et utilisez cet objet pour basculer entre les piles de vue. –

+0

merci encore !! J'ai compris ce que j'avais fait de mal ... J'ai créé un protocole sans le mettre en classe, donc c'était fort. Qu'est-ce qui retenait mon splashView. Donc, je vais essayer de créer un conteneur, on dirait que c'est une meilleure pratique .. Merci! – Gehlen