2016-10-18 6 views
1
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)") 
     } 
} 

上記コードは同じです。しかし、childViewControllersviewControllersの違いは何ですか?UINavigationControllerのviewControllerとchildViewControlleの相違点

public var childViewControllers: [UIViewController] { get } 

childViewControllers:現在のビューコントローラの子であるビューコントローラのアレイのドキュメントによると

答えて

1

。 (読み取り専用)。このプロパティには、提示されたView Controllerは含まれていません。このプロパティは、カスタムコンテナビューコントローラの実装によってのみ読み取られることを意図しています。

var viewControllers: [UIViewController] { get set } 

viewControllers:現在ナビゲーションスタック上のビューコントローラ。

注:ViewControllerchildViewControllersです。 viewControllersプロパティはUINavigationControllerで定義されています。

1

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はアレイ内のアイテム数です。 このプロパティにView Controllerの新しい配列を割り当てることは、animatedパラメータをfalseに設定してsetViewControllers:animated:メソッドを呼び出すことと同じです。

ChildViewControllersプロパティには、提示されたビューコントローラは含まれません。このプロパティは、カスタムコンテナビューコントローラの実装によってのみ読み取られることを意図しています。

構文については、Alt + Clickで簡単に説明できます。

関連する問題