在UINavigationController层次结构中刷新UITableView的最佳方法是什么

时间:2010-04-18 09:04:11

标签: iphone uitableview uinavigationcontroller

我对iPhone开发很新,并且很难找到我认为是解决这个问题的巧妙方法。

我有一个用户界面,其中记录数据的摘要显示在导航控制器内的表格中。当用户单击行的附件按钮时,新视图被推到导航控制器上,显示用户可以编辑相应记录中的数据的视图。完成后,编辑视图将从导航控制器的堆栈中弹出,用户将返回到表视图。

我的问题是,当用户返回到表视图时,该表仍会显示编辑记录之前的数据状态。因此,我必须重新加载表数据以显示更改。

在显示表数据之前,似乎无法重新加载表数据,因为调用仅更新显示的记录。在显示表格后重新加载它会导致旧数据在用户眼前发生变化,我对此并不满意。

在我看来,这似乎是一个非常正常的想要在iPhone应用程序中做的事情。

有人可以建议这样做的最佳做法吗?我觉得我错过了什么。

干杯 - 史蒂夫。

2 个答案:

答案 0 :(得分:16)

标准方法起初可能听起来很麻烦,但在很多情况下都是一种有用的模式。

在tableview类中创建一个类似的方法:

-(void)editDone {
    [self.tableView reloadData];
}

向编辑控制器添加属性,如:

@property (assign) id delegate;

单击附件时设置代理:

editController.delegate = self;

编辑完成后,请调用您的方法:

[delegate performSelector:@selector(editDone) withObject:nil];

您可以创建类似的方法来处理编辑组件的取消,或者执行模式编辑控制器的解除等。如果您愿意,可以将所有这些放在协议中更加优雅。

答案 1 :(得分:13)

我将通过以下方式实现此目的:

  1. 保存已点击单元格的indexPath。

  2. 实现视图控制器的-[UIViewController viewWillAppear:]方法,该方法包含UITableView。如果保存的indexPath不是nil,则使用以下命令重新加载指定的单元格

    -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]