重新加载表视图数据并取消选择单元格

时间:2012-04-26 00:18:07

标签: iphone ios cocoa-touch uitableview

我有一个表格视图,我想从详细视图返回先前选择的单元格,或者在用户创建项目时从新添加的单元格中取消选择。

但是,由于有时会添加新项目,因此通过调用reloadData中的viewWillAppear:来刷新表格。这意味着当视图出现时,即使我有self.clearsSelectionOnViewWillAppear = NO,也没有选择任何单元格。

通过在之后选择并取消选择表格视图(在viewDidAppear:中),取消选择动画的时间与用户明显不同(尝试自己,它更慢,不会感觉很光滑。

即使在刷新表格视图后,我应该如何保留选择? (请记住,根据具体情况,我希望取消选择之前选择的单元格或新创建的单元格。)或者我应该以不同方式重新加载表格中的数据?

2 个答案:

答案 0 :(得分:7)

您可以从NSIndexPath方法保存- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath,并在视图重新加载时取消选择该行。

另一种方法是将NSIndexPath和当前UITableViewController传递给您正在创建的UIViewController,并在弹出UIViewController时取消选择特定的一行。

创建新项目时,在indexPath的row元素中添加一个以取消选择右侧行。

您也可以只重新加载已更改的行:

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                      withRowAnimation:UITableViewRowAnimationNone];

[self.tableView selectRowAtIndexPath:indexPath 
                            animated:NO
                      scrollPosition:UITableViewScrollPositionNone];

[self.tableView deselectRowAtIndexPath:indexPath animated:YES];

答案 1 :(得分:0)

更多高级解决方案:

  • 它与@Order(2)一起使用。
  • 重新加载后缺少所选行时不会崩溃。

示例[self.tableView reloadData]中的部分代码:

MyViewController.m