2016-12-14 5 views
0

Im пытается обнаружить, когда контроллер просмотра выскочил из навигационного стека, таким образом, что у меня есть ссылка на контроллер на следующем уровне стека (в настоящее время работает с Swift 3). СпасибоЕсть ли способ узнать, выведен ли контроллер просмотра из стека навигации?

ответ

1

UINavigationController имеет свойство viewControllers, которое содержит массив контроллеров вида, находящихся в настоящее время в стеке. Вы можете получить массив контроллеров представлений, а затем получить следующий контроллер вида из этого массива:

guard let navController = self.navigationController else { 
    print("We are not part of a navigation stack!") 
    return 
} 
let stack = navController.viewControllers 
let stackCount = stackCount 
if stackCount > 1 { 
    let nextVC = viewControllers[stackCount - 2] 
    //nextVC now contains the view controller one down from the current VC 
} else { 
    //We are the root view controller 
} 
+0

А, получилось, что это работает, спасибо. Просто подумал, что это также можно сделать, вызвав willmovetoparent и доступ к массиву viewcontrollers. –

+0

Я не верю, что отношения родительского и дочернего элементов навигационных контроллеров и их детей документированы, поэтому я не буду рассчитывать на это. Детали реализации могут измениться из-под вас в некоторых будущих выпусках ОС и сломать ваш код. –

+0

Согласитесь, я внедрил ваше решение и добавил его в свои фрагменты кода. Благодаря! –