我有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)
}
答案 0 :(得分:0)
什么会触发那些视图控制器在其生命周期中循环?
父视图控制器,无论它的名称是什么,都将贯穿它的加载周期。所有观点也将贯穿其中。 (我敢打赌,如果你继承了一个视图,并使用它,在draw(rect :)中放置一个断点,它会点击它。)但是没有什么可以触发子视图控制器来做他们的事情。
从我看到的,您的视图层次结构是:
当主视图(前面提到的父视图控制器)加载时,它会经过通常的viewDidLoad
,viewWillAppear
,viewWillLoadSubviews
....及其... 那里所有上述视图都被加载,布局和绘制。
没有任何事情可以触发这三个页面控制器进行任何加载。