2016-09-13 6 views
3

У меня есть иерархия ViewControllers, с UINavigationViewController в качестве корня.
Как я могу узнать, был ли запущен какой-либо ViewController в первый раз или он был запущен в результате разматывания стека навигации?Как определить, что UIViewController был запущен в первый раз?

+0

Вы говорите о выполнении проверки в функции 'viewWillAppear', чтобы узнать, появляется ли она, потому что это первый раз, когда появилось представление или потому, что было отклонено другое представление? – rmaddy

+0

@rmaddy делает чек в функции viewWillAppear, чтобы узнать, появится ли это первый вид времени –

+0

Каков ваш прецедент? Обычно я рекомендую вам управлять своим состоянием вне вашего контроллера представления и просто обновлять его в viewWillAppear. – PeejWeej

ответ

6

Предполагая, что вы хотите знать, если viewWillAppear: (или viewDidAppear:) вызывается, когда первый отображается контроллер вида или, если он отображается, потому что другой контроллер представления был удален с поля, вы можете легко сделать следующее:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    if isBeingPresented() || isMovingToParentViewController() { 
     // This is the first time this instance of the view controller will appear 
    } else { 
     // This controller is appearing because another was just dismissed 
    } 
} 
0

Когда вы нажимаете новый viewcontroller на свой навигационный стек, он создается в первый раз, и когда вы выталкиваете его из стека, он освобождается или освобождается. поэтому, когда вы нажимаете или двигаетесь вперед, это первый раз, но когда вы возвращаетесь к любому диспетчеру просмотра из предыдущего, тогда текущий vc уже находится в памяти, а не в первый раз !!!

+0

Если метод init вызван, это означает, что VC запускается в первый раз? –

+0

да, вы можете сказать это !!! – Lion

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