更新UITableView数据

问题描述 投票:0回答:4

我有三个 ViewController:

RootViewController
FirstViewController
SecondViewController

从 RootViewController 中,我使用其他两个 ViewController 创建一个 TabBarController。所以我需要做类似的事情:

 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 中表的数据?

iphone ios uitableview uiviewcontroller reloaddata
4个回答
1
投票

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


1
投票

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

在 FirstViewController 中创建协议声明,例如

@class FirstViewController;

@protocol FirstViewControllerDelegate

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

@end

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

然后在你的第一个ViewController中,当你有新数据要更新时调用

[self.delegate updateDataFromFirstViewController:yourNewData];

在SecondViewController.m中实现该方法,并将委托添加到SecondViewController.h中

SecondViewController: UIViewController <FirstViewControllerDelegate>

然后在

-(void) viewWillAppear:(BOOL)animated

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


0
投票

你的

TabBarController
持有
FirstViewController
SecondViewController
吗?在
TabBarController
中,有一个属性-
viewControllers
。它是一个数组,因此您可以使用它来访问您的 viewController。

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

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

希望这有帮助。


-1
投票

你可以这样访问第二个ViewController:

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;

    }
    
}];
© www.soinside.com 2019 - 2024. All rights reserved.