在视图控制器之间传输数据的新方法

时间:2013-08-10 19:15:46

标签: ios uiviewcontroller transfer

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

情况:我有一个第一个viewController(' CalViewController'),它允许用户输入数据。然后我用这些数据计算一个数字(例如,名为'卡路里')。接下来的观看次数是显示在UIViewController中的两个DrinksViewControllerFoodViewController& 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。有什么想法吗?

2 个答案:

答案 0 :(得分: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实例 与标签栏控制器使用的实例完全无关。

答案 1 :(得分:0)

您需要获取标签栏控制器中已有的实例。你可以使用self.tabBarController.viewControllers [n]来做到这一点,其中n将是0,1或2,具体取决于你试图访问的控制器。