【问题标题】:Pass data from one view controller to another without transitioning将数据从一个视图控制器传递到另一个视图控制器而不进行转换
【发布时间】:2013-12-11 17:46:01
【问题描述】:

我有视图控制器 A (VCA) 和视图控制器 B (VCB)。 VCA 从 API 调用中提取数据并使用返回的数据填充标签等。

当检索到这些数据时,我希望能够将其中的一些传递给 VCB,而无需转换到 VCB。当需要“去”到 VCB 时,我希望数据已经存在。

目前我有两个视图控制器通过呈现和呈现的模态视图链接。这很好用,当我展示 VCB 时,我会从 VCA 发送数据。但是,从 UI/UX 的角度来看,我正在切换到滑动面板视图。所以你从VCA开始,然后可以向左滑动,从右边滑入VCB。

由于滑动,您可以同时看到两个视图控制器,这就是为什么我希望 VCB 在视觉上已经完成。

我当前在 VCA 中的代码是在双击手势识别器上调用的:

- (void)showDetailView
{
    // Initialize VCB
    ViewContollerB *vcb = [[ViewContollerB alloc] init];

    //  ················································
    //  Pass data to ViewContollerB
    //  ················································

    vcb.currently = currently;
    vcb.hourly    = hourly;
    vcb.daily     = daily;
    vcb.unitTemp  = unitTemp;

    vcb.currentLocationCity   = currentLocationCity;
    vcb.currentLocationRegion = currentLocationRegion;
    vcb.currentTemp           = currentTemp;

    // Set transition style to cross fade
    vcb.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

    // Present the daily details
    [self presentViewController:vcb animated:YES completion:nil];
}

就像我之前说的,这很好用。

在接收端(VCB),我在- (void)viewWillAppear:(BOOL)animated中有这样的东西

if (currentTemp) {
    // Displays data from passed variables
    [self displayHeaderInfo];
}

我想做的基本上是在 VCA 中做的:

// PRETEND DATA RETURNED FROM API CALL IN VCA

if (currentTemp) {
    // Set array for VCB
    vcb.currentTemp = currentTemp;

    **** CODE TO SEND THIS TO VCB ****
    **** BUT NOT GO TO VCB, STAY  ****
    **** RIGHT HERE IN VCA.       ****

    // Display in VCA
    [self displayCurrentTemp];
}

这可能吗?

【问题讨论】:

  • 为什么不直接删除[self presentViewController:vcb animated:YES completion:nil];这一行?
  • 这一行:vcb.currentTemp = currentTemp;表明您已经知道如何将数据传递给 vcb。所以你的问题不是很清楚......
  • 是的,我可以通过。但是我需要数据在准备好后静默传递,而不是基于任何用户交互或事件。那有意义吗?似乎下面的答案是要走的路。我会尝试并报告。

标签: ios objective-c uiviewcontroller


【解决方案1】:

在这种情况下,最好将获取数据的角色分配给单独的 DataFetcher 对象。不要让你的 UIViewControllers 负责获取数据。

实现一个 DataFetcherDelegate 或一个完成块,当数据被获取时通知 ViewControllers。

有关委托方法的示例实现,请参阅this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多