0

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

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

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

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

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

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

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

问题:我的值Calories没有从CalViewControllerto转移DrinksViewControlller。有任何想法吗 ?

4

2 回答 2

3

如果我正确理解了您的问题,则以下内容应在第一个视图控制器中起作用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;

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

于 2013-08-10T19:55:42.853 回答
0

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

于 2013-08-10T20:03:48.387 回答