2010-02-08 76 views
2

我有一个复杂的内容UITableView。用户可以用标准方式点击编辑按钮来编辑(重新排列和删除)单元格。但我希望单元格在“编辑”模式下看起来不同。当用户点击编辑按钮时,重做UITableView布局?

问:

如何改变UITableView的布局在编辑模式下,包括更改行高?

到目前为止,这是我所:

编辑按钮发送WillTransitionToState/DidTransitionToState消息发送到每个UITableViewCell的(UITVC)。我已经对UITVC进行了分类,并对每个单元格内的这些内容做出反应,根据需要隐藏,删除和重新洗牌。但是,更改行高不在一个单元格的范围内。

当用户点击编辑时,似乎没有发送到UITableView的消息。有一个 - tableView:commitEditingStyle:forRowAtIndexPath:编辑特定行后发送到数据源。

里面heightForRowAtIndexPath,我可以使用tableView.editing属性查询当前模式,并适当报告高度。我可以通过调用[tableView reloadData]来触发表重新流动,包括重新计算高度。但是,我什么时候打电话?

我可以将信息从WillTransitionToState中的单元发送回“拥有”表视图,并在我获取它们时调用reloadData。但这听起来很脆弱,必须有更好的办法。

回答

3

如果希望表格单元格根据表格是否处于编辑模式而改变其格式,可以在您的UITableViewController中覆盖-setEditing:animated:并触发表格视图的更新(通过-reloadData)编辑状态。

在您的UITableViewController的-tableView:cellForRowAtIndexPath:方法中,您可以通过查询表视图上的editing属性来检查表是否处于编辑状态,然后根据表所处的状态返回不同的单元类型。

+0

按预期工作。 (BOOL)编辑动画:(布尔)动画,但我使用 - (UITableView *)tableView setEditing:(布尔)编辑动画:(布尔) )动画,这当然不起作用。因此,请始终在文档中仔细检查方法签名。 :) – Jaanus

+1

reloadData杀死很好的编辑动画死... –

8

有节奏的是对的。使用reloadData杀死很好的编辑动画。

这个问题在这个帖子讨论: Can you animate a height change on a UITableViewCell when selected?

而不是使用reloadData的,做调用setEditing后如下:动画。

[tableview setEditing:editing animated:YES]; 
[tableview beginUpdates]; 
[tableview endUpdates]; 
相关问题