我有一个UIPageViewController
,其中一个View Controller
有一个Container View
,其父View Controller
将数据传入其中,因此容器可以显示动态数据。我目前有父视图使用此prepareForSegue
方法将数据传递到容器视图中的视图中:
//In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"CALLED PREPARE FOR SEGUE");
if ([segue.identifier isEqualToString:@"viewEmbed"]) {
//pass data
}
}
但是,这个prepareForSegue
方法只调用一次(注意我的NSLog调试语句),但每次UIPageViewController
滑动到父视图时,我都需要将不同的数据传递给子视图。我还注意到viewDidLoad
方法在父视图中只触发一次,因为UIPageViewController
保留了其页面的状态。
有没有办法在每次从UIPageViewController
刷到父视图时重新实例化(再次调用viewDidLoad)?我想这会使prepareForSegue
方法不止一次发生,我需要这样做。或者我是否以错误的方式思考这个问题并且有更优雅的解决方案?
任何帮助或建议将不胜感激。感谢。
答案 0 :(得分:2)
视图确实加载只调用一次,因为您的视图只会被加载一次。你应该通过
手动完成UIPageViewController
impelemt
- (void)pageViewController:(UIPageViewController * nonnull)pageViewController
willTransitionToViewControllers:(NSArray<UIViewController *> * nonnull)pendingViewControllers
接收这些更新
为您的孩子调用一种方法但不是 viewDidLoad
,viewWillAppear
或viewDidAppear
,因为代码不应多次执行。您应该将当前viewDidLoad代码从您的子项复制到新方法中,并在调用委托方法时从父项调用此方法