代码之家  ›  专栏  ›  技术社区  ›  Jaanus

当用户点击编辑按钮时是否重做uitableview布局?

  •  2
  • Jaanus  · 技术社区  · 15 年前

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

    问题:

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

    到目前为止,这就是我所拥有的:

    编辑按钮向每个uitableviewcell(uitvc)发送willtransitionontate/didtrantiontostate消息。我已经将uitvc分为子类,并在每个单元内对其做出反应,根据需要隐藏、移除和重新洗牌。但是,更改行高超出了一个单元格的范围。

    当用户点击“编辑”时,似乎没有消息发送到uitableview。编辑特定行后,有一个-tableview:committedingstyle:forrowatindexpath:发送到数据源。

    在heightforrowatindexpath中,我可以使用tableview.editing属性查询当前模式,并根据需要报告高度。我可以通过调用[TableView ReloadData]来触发表的重新流动,包括重新计算高度。但是,我什么时候叫它?

    我可以从willtransitiontostate中的单元格发送消息,返回到“owning”表视图,并在获得它们时调用reloaddata。但这听起来很脆弱,必须有更好的办法。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Brad Larson    15 年前

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

    在uitableviewcontroller的 -tableView:cellForRowAtIndexPath: 方法,可以通过查询 editing 属性,然后根据表所处的状态返回不同的单元格类型。

        2
  •  8
  •   Community CDub    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];