我有一个带有单元格的UITableView,可以在选中时将viewControllers推送到堆栈。子视图控制器接受用户输入,然后弹出堆栈。
当弹出子viewController时,我希望父tableView更新所选单元格的值,然后取消选择该行。我可以使用reloadData更新单元格,我可以使用deselectRowAtIndexPath - 取消选择该行,但我不能同时执行这两项。
我理解为什么这是 - reloadData隐式取消选择单元格,deselectRowAtIndexPath明确地取消选择它,但我发现很奇怪我找不到任何想要实现相同重载/取消选择行为的人。我在这里缺少什么?
所有代码都在viewWillAppear:animated中 - 如果我在viewDillAppear中放置deselectRowAtIndexPath并在viewDidAppear中放置reloadData,我可以接近,但这不是我想要的。
答案 0 :(得分:8)
重新加载单元格时,会自动取消选择。这是因为您未在selected
中将单元格的YES
属性设置为tableView:cellForRowAtIndexPath:
。所以你必须以不同的方式处理这个问题。确定indexPath
处的单元格需要selected
并在selected
中将YES
属性设置为tableView:cellForRowAtIndexPath:
,或者在重新加载数据后选择它。在这种情况下,您可以执行以下方法 -
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationNone];
[self.tableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
步骤的顺序是: -
这样我觉得你可以得到你想要的效果。
答案 1 :(得分:0)
当用户第一次点击行加载可编辑视图控制器时,在加载可编辑的ViewController之前取消选择UITableViewCell。