【问题标题】:iOS - Pass Data Multiple Times From Parent View Into Container View's ViewiOS - 将数据多次从父视图传递到容器视图的视图
【发布时间】:2015-09-06 01:34:48
【问题描述】:

我有一个UIPageViewController,它的一个View Controllers 有一个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 方法不止一次触发,我需要它来做。还是我想错了,有更优雅的解决方案?

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

【问题讨论】:

    标签: ios objective-c uipageviewcontroller uicontainerview


    【解决方案1】:

    视图确实加载只被调用一次,因为你的视图只会被加载一次。您应该手动执行此操作

    • UIPageViewController 上注册代表更新
    • 强制

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

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

    【讨论】:

    • 很抱歉没有提到这一点,但是我的UIPageViewController 在向父视图滑动时已经将数据传递给父视图。我尝试通过执行 [storyboard instantiateViewControllerWithIdentifier] 从父视图控制器中设置子视图的类变量,但这不起作用。基本上,我不明白如何在不做prepareForSegue的情况下访问容器视图内的视图控制器。
    • 设置子视图控制器的类变量是指设置.h文件中声明的属性变量。
    • instantiateViewControllerWithIdentifier 将创建该 viewController 的新实例 - 这不会更改现有实例。您只需在 prepareForSegue 方法中存储对父(或子)的引用
    • 噢噢噢噢,我从来没想过。我马上试试,谢谢!
    猜你喜欢
    • 2018-05-06
    • 2019-11-14
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多