viewDidload和viewDidAppear没有被调用?

时间:2017-01-26 22:43:10

标签: ios swift uiviewcontroller uiscrollview viewcontroller

我有3个视图控制器和一个容器视图控制器。我将这3个视图控制器添加为容器中的子视图控制器。当我启动应用程序时,我在所有视图控制器中的viewDidload和viewDidAppear中都有print语句。

问题是:当我"滚动"回到那些观点,它出现"再次,print语句不会执行,也不会在viewDidAppear和viewDidLoad中执行任何代码。为什么会这样?

这是我实例化视图控制器的代码。谢谢你的帮助!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.delegate = self



    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController
    page1.view.translatesAutoresizingMaskIntoConstraints = false
    page1.delegate = self
    scrollView.addSubview(page1.view)
    addChildViewController(page1)
    page1.didMove(toParentViewController: self)

    page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController
    page2.view.translatesAutoresizingMaskIntoConstraints = false
    page2.delegate = self
    scrollView.addSubview(page2.view)
    addChildViewController(page2)
    page2.didMove(toParentViewController: self)

    page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController
    page3.view.translatesAutoresizingMaskIntoConstraints = false
    scrollView.addSubview(page3.view)
    addChildViewController(page3)
    page3.didMove(toParentViewController: self)


}

1 个答案:

答案 0 :(得分:0)

什么会触发那些视图控制器在其生命周期中循环?

父视图控制器,无论它的名称是什么,都将贯穿它的加载周期。所有观点也将贯穿其中。 (我敢打赌,如果你继承了一个视图,并使用它,在draw(rect :)中放置一个断点,它会点击它。)但是没有什么可以触发子视图控制器来做他们的事情。

从我看到的,您的视图层次结构是:

  • 主视图
  • 在主视图中滚动视图
  • 滚动视图中的三个页面视图

当主视图(前面提到的父视图控制器)加载时,它会经过通常的viewDidLoadviewWillAppearviewWillLoadSubviews ....及其... 那里所有上述视图都被加载,布局和绘制。

没有任何事情可以触发这三个页面控制器进行任何加载。