Разница между ViewControllers и childViewControlle для UINavigationController

#ios #swift #uinavigationcontroller

#iOS #swift #uinavigationcontroller

Вопрос:

 fileprivate func test() {

        guard let w = self.view.window else {
            print("no window")
            return
        }
        guard let rootvc = w.rootViewController as? UINavigationController else {
            print("no rootvc")
            return
        }

        for vc in rootvc.childViewControllers {
            print("CHILD (vc)")
        }

        for vc in rootvc.viewControllers {
            print("VC (vc)")
        }
}
  

приведенный выше код показывает то же самое. Но в чем разница между childViewControllers и viewControllers ?

Ответ №1:

Согласно документации:

 public var childViewControllers: [UIViewController] { get }
  

childViewControllers: массив контроллеров представления, которые являются дочерними элементами текущего контроллера представления. (только для чтения). Это свойство не включает в себя какие-либо представленные контроллеры представления. Это свойство предназначено только для чтения реализацией пользовательского контроллера представления контейнера.

 var viewControllers: [UIViewController] { get set }
  

ViewControllers: контроллеры просмотра, которые в настоящее время находятся в стеке навигации.

ПРИМЕЧАНИЕ: У A ViewController также есть childViewControllers свойство. но viewControllers свойство, определенное в UINavigationController .

Ответ №2:

ViewControllers The view controllers currently on the navigation stack. где ChildViewControllers находятся An array of view controllers that are children of the current view controller .

Корневой контроллер представления имеет индекс 0 в массиве, контроллер заднего вида имеет индекс n-2, а верхний контроллер имеет индекс n-1, где n — количество элементов в массиве. Назначение нового массива контроллеров представления этому свойству эквивалентно вызову метода setViewControllers:animated: с параметром animated, установленным в false.

ChildViewControllers свойство не включает в себя какие-либо представленные контроллеры представления. Это свойство предназначено только для чтения реализацией пользовательского контроллера представления контейнера.

Вы можете легко получить описание об этом Alt Click по синтаксису!!