iphone sdk - 重新加载tableview数据 - 来自一个单独的类

时间:2010-01-27 17:26:31

标签: iphone reload tableview

我想运行代码[tableView reloadData],除了我想从一个单独的类调用它到我想重新加载数据的视图控制器。

(注意:如果重新加载tableview比reloadData更有效,请加入)。

假设我要重新加载的视图是'RootViewController',我目前在'DetailViewController'中,我需要做些什么才能使它工作。

我现在最好的尝试是[RootViewController.tableView reloadData],但它不对。 (我得到错误:预期':'之前。令牌。

问候,@ norskben

2 个答案:

答案 0 :(得分:9)

您可以使用通知或协议。

使用通知:

在完成保存数据之后和从方法返回之前发布通知。像这样:

//发布通知 [[NSNotificationCenter defaultCenter] postNotificationName:@“DataSaved”对象:nil];

在处理表的控制器中,实现

- (void) dataSaved:(NSNotification *)notification{

    [self.tableView reloadData];

}

并在其viewDidLoad方法中添加以下代码以注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(dataSaved:)
                                                 name:@"DataSaved" object:nil];

最后,在dealloc方法中取消注册添加

[[NSNotificationCenter defaultCenter] removeObserver:self];

使用协议:

开始创建一个带有前一个控制器可以使用的回调的协议。

@protocol dataSavedDelegate
-(void)dataSaved;
@end

完成保存数据后:

[(id< dataSavedDelegate >)object dataSaved];

现在,在您之前的控制器中,您处理委托方法:在dataSaved()方法中重新加载表格。

答案 1 :(得分:1)

您需要在DetailViewController中引用您的RootViewController实例。在DetailViewController中声明一个属性,当你实例化DetailViewController时(我假设是从RootViewController),用

之类的东西设置它
// in RootViewController.m
detailController.rootController = self;
[self.navigationController pushViewController:...

然后,您可以从详细控制器访问根控制器:

[self.rootController.tableView reloadData];

另一种方法是在希望RootController重新加载并让RootController监听通知时在DetailViewController中发布自定义NSNotification。

另一种方法是仅在用户返回根控制器时重新加载表(在RootViewController的viewWillAppear:方法中执行),为什么重新加载甚至不在屏幕上的表?