2010-06-30 113 views
1

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

UITableViewCell覆盖“willTransitionToState”并根据位掩码值,要求重绘UIView。因为我要求UIView重新绘制自己,每次我做一个“滑动删除”,我看到细胞“闪烁”一会儿;即使是由于删除按钮而没有移动位置的文本也会因为一切正在重绘而发生闪烁。

我知道,一个可能的解决方案是不是从“willTransitionToState”呼“setNeedsDisplay”中的UIView,而是称之为“setNeedsLayout”,并有UIView的实施“layoutSubviews”。

这是我被困在:我怎样才能重新布局我UIView,因为我UIView为“绘制”(我用“drawInRect”和字符串和图像“drawAtPoint”方法)里面的一切。在右侧出现一个字符串,当“删除”按钮出现时(例如iPhone中的消息应用程序),我想隐藏该字符串。

我该如何做重新布局而不是重新绘制?

谢谢!!!

回答

2

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

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

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

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

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