2013-07-02 43 views
0

我有三个ViewControllers:更新UITableView的数据

RootViewController 
FirstViewController 
SecondViewController 

从创建与其他两个ViewControllers一个TabBarController的RootViewController的。所以我需要这样做:

FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 

SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

然后将控制器添加到TabBarController。 在那一刻,我的两个ViewController被实例化。

要更新我在FirstViewController.m尝试这样的数据:

SecondViewController *test = [[SecondViewController alloc] init]; 
[test.tableView reloadData]; 

但什么也没有发生,我想是因为我SecondViewController之前已被分配,并且正在创建它的一个新的实例。

如何从我的FirstViewController更新SecondViewController中的Table的数据?

回答

1

让您的根视图控制器在创建它们时将viewController2的值传递给viewController1。描述属性很弱,因为你想让rootController拥有它们,而不是其他viewController。

0

您的TabBarController是否持有FirstViewControllerSecondViewController?在TabBarController,有一个属性 - viewControllers。它是一个数组,所以你可以使用它来访问你的viewControllers。

[tabBarController.viewControllers objectAtIndex:0];//This is your First viewController 
[tabBarController.viewControllers objectAtIndex:1];//This is your Second viewController 

然后访问sencondViewController的tableView并重新加载它。

希望这是有帮助的。

1

如果您尝试更新第二个视图控制器中使用的数据而不需要切换,我将使用委托模式。

创建FirstViewController协议的声明像

@class FirstViewController; 

@protocol FirstViewControllerDelegate 

-(void) updateDataFromFirstViewController: (NSMutableArray*)newArray; 

@end 

@property (strong, nonatomic) id<FirstViewControllerDelegate>delegate; 

然后当你有新的数据来更新呼叫

[self.delegate updateDataFromFirstViewController:yourNewData]; 

实现SecondViewController.m这种方法,并委托添加到您的firstViewController SecondView Controller.h

SecondViewController: UIViewController <FirstViewControllerDelegate> 

Th在

-(void) viewWillAppear:(BOOL)animated 

重新加载您的表数据,以便当您实际需要查看更新的数据时,它在切换时出现。另外,不要忘记在SecondViewController中将FirstViewController委托设置为self。

+0

我当tryn到添加到SecondViewController.h错误(它说,委托不存在):S –

+0

没有你'#进口“FirstViewController。h“' –

-1

这会帮助你。您可以通过这种方式访问​​secondViewController。

UITabBarController *tabController = (UITabBarController *)[self parentViewController]; 

[tabController.viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

    if ([obj isKindOfClass:[SecondViewController class]]) { 
     SecondViewController *secondController = obj; 
     [secondController.tableView reloadData]; 
     *stop = YES; 

    } 

}]; 
+0

正如orange9792所建议的那样,在这种情况下委托人会更合适,我会尽可能避免在层次结构上列举。 –