Custom UITableViewCell和UIView的LayoutSubviews

时间:2010-06-30 08:41:35

标签: iphone uiview uitableview

我有自定义UITableViewCell。它有一个UIView,它被添加到UITableViewCell的“contentView”中。对于任何更新,我通过调用“UIView”并在UIView的“ drawRect ”方法中实现绘图来重绘setNeedsDisplay

UITableViewCell覆盖“ willTransitionToState ”并根据位掩码值,要求UIView重绘。

因为我要求UIView再次重绘自己,每次“刷卡删除”时,我都会看到细胞“闪烁”片刻;即使是由于删除按钮而没有移动位置的文本也会因为重新绘制所有内容而闪烁。

我知道可能的解决方案不是从“ willTransitionToState ”调用UIView的“ setNeedsDisplay ”,而是调用“ setNeedsLayout “并拥有UIView工具” layoutSubviews “。

这是我坚持的地方:如何重新布置我的UIView,因为UIView内的所有内容都是“绘制”(我使用“drawInRect”和字符串和图像的“drawAtPoint”方法)。当出现“删除”按钮时,我想隐藏右侧的字符串(如iPhone中的消息应用程序)。

如何通过重新布局而不是重新绘制来实现这一目标?

谢谢!!!

1 个答案:

答案 0 :(得分:2)

我认为您的方法存在问题。而不是绘制所有内容,最好在init方法或NIB中设置子视图。

willTransitionToState方法中,根据状态转换更新任何子视图。

layoutSubviews中,根据需要更新每个子视图的来源和大小。

以下是willTransitionToState文档中的一些细节。虽然,我相信你已经看过了这个:

  

UITableViewCell的子类可以实现此方法,以便在更改状态时为单元格的其他更改设置动画。每当单元格在状态之间转换时,UITableViewCell都会调用此方法,例如从正常状态(默认)到编辑模式。自定义单元格可以设置和定位以新状态显示的任何新视图。然后,单元格接收layoutSubviews消息(UIView),在该消息中,它可以将这些新视图定位在新状态的最终位置。重写此方法时,子类必须始终调用super。