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

Ste*_*eal 4 iphone uitableview uinavigationcontroller

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

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

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

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

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

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

干杯 - 史蒂夫.

Pau*_*nch 16

标准方法起初可能听起来很麻烦,但对于很多情况来说都是一种有用的模式.

在tableview类中创建一个方法,如:

-(void)editDone {
    [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

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

@property (assign) id delegate;
Run Code Online (Sandbox Code Playgroud)

单击附件时设置代理:

editController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

编辑完成后,像这样调用您的方法:

[delegate performSelector:@selector(editDone) withObject:nil];
Run Code Online (Sandbox Code Playgroud)

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


kov*_*pas 13

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

  1. 保存单击的单元格的indexPath.

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

    -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]