我有一个包含复杂内容的UITableView。当用标准方式点击“编辑”按钮时,用户可以编辑(重新排列和删除)单元格。但我希望细胞在“编辑”模式下看起来不同。
问题:
如何在编辑模式下更改UITableView布局,包括更改行高?
到目前为止,这就是我所拥有的:
“编辑”按钮向每个uitableviewcell(UITVC)发送WillTransitionToState / DidTransitionToState消息。我已经将UITVC子类化并对每个单元内的这些进行反应,根据需要进行隐藏和移除以及重新洗牌。但是,更改行高超出了一个单元格的范围。
当用户点击编辑时,似乎没有向UITableView发送消息。有一个 - tableView:commitEditingStyle:forRowAtIndexPath:在编辑特定行后发送到数据源。
在heightForRowAtIndexPath中,我可以使用tableView.editing属性查询当前模式,并根据需要报告高度。我可以通过调用[tableView reloadData]来触发重新流动表,包括重新计算高度。但是,我什么时候打电话给它?
我可以将来自WillTransitionToState内的单元格的消息发送回“拥有”表视图,并在获取它们时调用reloadData。但这听起来很脆弱,必须有更好的方法。
答案 0 :(得分:8)
节奏是对的。使用reloadData可以杀死漂亮的编辑动画。
这篇文章解决了这个问题: Can you animate a height change on a UITableViewCell when selected?
在调用setEditing:animated。
之后,请执行以下操作,而不是使用reloadData[tableview setEditing:editing animated:YES];
[tableview beginUpdates];
[tableview endUpdates];
答案 1 :(得分:3)
如果您希望表格单元格更改其格式以响应表格是否处于编辑模式,您可以覆盖UITableViewController中的-setEditing:animated:
并触发重新加载(通过-reloadData
)关于编辑状态变化的表格视图。
在UITableViewController的-tableView:cellForRowAtIndexPath:
方法中,您可以通过查询表视图上的editing
属性来检查表是否处于编辑状态,然后根据具体情况返回不同的单元格类型该表所处的状态。