我有一个表格视图,我想从详细视图返回先前选择的单元格,或者在用户创建项目时从新添加的单元格中取消选择。
但是,由于有时会添加新项目,因此通过调用reloadData
中的viewWillAppear:
来刷新表格。这意味着当视图出现时,即使我有self.clearsSelectionOnViewWillAppear = NO
,也没有选择任何单元格。
通过在之后选择并取消选择表格视图(在viewDidAppear:
中),取消选择动画的时间与用户明显不同(尝试自己,它更慢,不会感觉很光滑。
即使在刷新表格视图后,我应该如何保留选择? (请记住,根据具体情况,我希望取消选择之前选择的单元格或新创建的单元格。)或者我应该以不同方式重新加载表格中的数据?
答案 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