我在UIViewController
之间传输数据时出现问题,而且我在以前的问题中找不到答案。
情况:我有一个第一个viewController(' CalViewController'),它允许用户输入数据。然后我用这些数据计算一个数字(例如,名为'卡路里')。接下来的观看次数是显示在UIViewController
中的两个DrinksViewController
(FoodViewController
& 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
。有什么想法吗?
答案 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,具体取决于你试图访问的控制器。