iOS - 从父视图多次将数据传递到容器视图的视图中

时间:2015-06-19 23:43:32

标签: ios objective-c uipageviewcontroller uicontainerview

我有一个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方法不止一次发生,我需要这样做。或者我是否以错误的方式思考这个问题并且有更优雅的解决方案?

任何帮助或建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

视图确实加载只调用一次,因为您的视图只会被加载一次。你应该通过

手动完成
  • UIPageViewController
  • 上注册代表更新
  • impelemt

    - (void)pageViewController:(UIPageViewController * nonnull)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> * nonnull)pendingViewControllers接收这些更新

  • 为您的孩子调用一种方法但不是 viewDidLoadviewWillAppearviewDidAppear,因为代码不应多次执行。您应该将当前viewDidLoad代码从您的子项复制到新方法中,并在调用委托方法时从父项调用此方法