2017-01-29 10 views
0

Это может быть новичку вопрос - у меня есть поток, который я создаю в приложение делегата установки первого окна NavigationController, как показано ниже:Удалить все navigationControllers из стека и создать установки нового навигационного потока новое окно - лучшие практики

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

self.window = window 

Это SplashViewController корень моего первого потока (учебник, для входа в аккаунт и регистрация) и для каждого из них, я создаю новый navControll (модальность и т.д.)

незадача: когда этот поток будет сделано, пользователю заходите в HomeViewController - Здесь я должен убирать вещи. Удалите мой старый поток из кучи, чтобы все было нормально, чтобы «запустить» приложение.

Я искал, и многие люди используют для создания нового окна, вызывающего однопользовательский режим AppDelegate. Это хорошая практика? (Я пробовал, но мой Splash остается там) - кстати, я играю видео на этом Splash в качестве фона.

Я также попробовал уведомить об увольнении моего потока, но мой всплеск все еще там .. Дайте мне знать, если вам нужно больше контекста.

Цените любую помощь! заранее спасибо!

ответ

1

Самый простой способ определить, в функции AppDelegate как

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

Это изменит RootViewController текущего окна. Этого достаточно, вам не нужно создавать новый объект Window.

+0

Привет @Dzmitry, спасибо за ваш ответ! Итак, если я создаю эту функцию o своего AppDelegate и назову ее, должен сделать трюк? Удаляет ли это из других стека другие диспетчеры просмотра (и navControllers)? Я попробую здесь .. Просто хочу знать, нужно ли мне делать что-то еще. – Gehlen

+0

@Gehlen Да, это все, что вам нужно. Но есть некоторые проблемы с rdar об ошибках iOS при настройке rootViewController таким образом. Поэтому я предлагаю проверить, что ваш стек представлений удовлетворен. Если никакое тогда возможное обходное решение, которое я иногда использую, должно создать ваш собственный контроллер контейнера, который используется как rootViewController по умолчанию и представляющий все другие VC в вашем приложении. И используйте этот объект для переключения между стеками представлений. –

+0

еще раз спасибо !! Я понял, что я сделал не так. Я создал протокол без установки в качестве класса, поэтому он был сильным. Что удерживало мой splashView. Итак, я постараюсь создать контейнер, похоже, что это лучше. Спасибо! – Gehlen