2

我有一个 UITableView,其中的单元格在选择时会将 viewControllers 推送到堆栈上。子视图控制器接受用户输入,然后从堆栈中弹出。

当子 viewController 弹出时,我希望父 tableView 更新所选单元格的值,然后取消选择该行。我可以使用 reloadData 更新单元格,也可以使用 deselectRowAtIndexPath 取消选择该行 -但我不能同时执行这两项操作

我理解为什么会这样 - reloadData 隐式取消选择单元格,而 deselectRowAtIndexPath 显式取消选择它,但我很奇怪我找不到任何人想要实现相同的重新加载/取消选择行为。我在这里想念什么?

所有代码都在 viewWillAppear:animated 中 - 如果我将 deselectRowAtIndexPath 放在 viewWillAppear 中并将 reloadData 放在 viewDidAppear 中,我可以接近,但这不是我想要的。

4

2 回答 2

8

当您重新加载一个单元格时,它会自动被取消选择。那是因为您没有将单元格的selected属性设置为YESin tableView:cellForRowAtIndexPath:。所以你必须以不同的方式处理这个问题。确定需要的单元格indexPathselected适当地将其selected属性设置为YESintableView:cellForRowAtIndexPath:或在重新加载数据后选择它。在这种情况下,您可以执行以下方法-</p>

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

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

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

步骤的顺序是:-

  1. 重新加载没有任何动画的行。
  2. 选择没有动画的行。
  3. 取消选择带有动画的行。

这样我觉得你可以得到你想要的效果。

于 2011-06-24T01:45:29.730 回答
0

当用户第一次点击该行以加载可编辑视图控制器时,在加载可编辑视图控制器之前取消选择 UITableViewCell。

于 2011-06-24T01:34:19.460 回答