【问题标题】:New ways to transfer data between view controllers在视图控制器之间传输数据的新方法
【发布时间】:2013-08-10 19:15:46
【问题描述】:

我在UIViewController 之间传输数据时遇到问题,我在以前的问题中找不到答案。

情况:我有一个允许用户输入数据的第一个 viewController ('CalViewController')。然后我用这些数据计算一个数字(例如,名为“卡路里”)。接下来的视图是两个UIViewControllerDrinksViewControllerFoodViewController)显示在TabBarController 中,我需要“卡路里”的值。

我尝试过的: -prepareForSegue 方法:它不起作用,因为TabBarController 中的segues(故事板中的符号是两点之间的链接)不像其他人(故事板中的符号是穿过门的箭头)。

-'didSelectViewController' 方法:此方法未“激活”以显示 TabBarController 的第一个视图。所以我成功地将Calories 转移到TabBarController 中的第二个ViewController(即FoodViewController),但没有转移到TabBarController 中的第一个viewController(即DrinksViewController)。

-调用“原始”值:这是我在CalViewController 中所做的(在导入DrinksViewController.h 之后)

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456;

我不知道为什么这第三种方法不起作用。

问题: 我的Calories 值没有从CalViewController 转移到DrinksViewControlller。有什么想法吗?

【问题讨论】:

  • 也许您可以将用户输入保存在 plist 文件中,然后从其他视图控制器访问该文件中的数据。
  • CALViewController 是否也在标签栏控制器中?

标签: ios uiviewcontroller transfer


【解决方案1】:

如果我正确理解您的问题,以下应该首先工作 视图控制器CalViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"yourSegueToTabBarIdentifier"]) {
        UITabBarController *tbc = [segue destinationViewController];
        DrinksViewController *dvc = tbc.viewControllers[0];
        dvc.caloriesImported = 456;
        FoodViewController *fvc = tbc.viewControllers[1];
        fvc.someProperty = someValue;
    }
}

注意

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456;

无法工作,因为它分配了一个 new DrinksViewController 实例 与标签栏控制器使用的实例完全无关。

【讨论】:

    【解决方案2】:

    您需要获取标签栏控制器中已经存在的实例。您可以使用 self.tabBarController.viewControllers[n] 执行此操作,其中 n 将是 0、1 或 2,具体取决于您尝试访问的控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多