2015-06-19 97 views
1

我有一个UIPageViewController,其中一个View Controller s有一个Container View,其父View Controller将数据传递给它,以便容器可以显示动态数据。我现在有将数据传递到视图的容器视图中使用此prepareForSegue方法父视图:iOS - 将数据从父视图多次传递到容器视图的视图

//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保留了其页面的状态。

是否有办法重新实例化(再次调用viewDidLoad)父视图,每次它从UIPageViewController滑动到?我在想这会使prepareForSegue方法不止一次触发,我需要这样做。或者我想这是错误的方式,并有一个更优雅的解决方案?

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

回答

2

视图加载只会被调用一次,因为您的视图将只加载一次。你应该对委托updades手动做到这一点通过

  • 寄存器的UIPageViewController
  • impelemt

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

  • 呼叫的方法对你的孩子但不viewDidLoadviewWillAppearviewDidAppear,因为存在不应执行多次的代码。您应该复制您当前的viewDidLoad代码,你的孩子到一个新的方法和调用此方法从父当代表方法被调用

+0

对不起,不提这一点,但我的'UIPageViewController'已经将数据传递到父在向父视图滑动时查看。我尝试通过[storyboard instantiateViewControllerWithIdentifier]设置子视图的父类视图控制器中的类变量,但这不起作用。基本上,我不明白如何在不执行'prepareForSegue'的情况下访问容器视图内的视图控制器。 – Rafi

+0

通过设置子视图控制器的类变量,我的意思是设置.h文件中声明的属性变量。 – Rafi

+1

instantiateViewControllerWithIdentifier将创建该viewController的新实例 - 这不会更改现有的一个。您只需在您的prepareForSegue方法中存储对父(或子)的引用 –

相关问题