如何破解子视图的清除?

Posted

技术标签:

【中文标题】如何破解子视图的清除?【英文标题】:How to hack clearing of a subview? 【发布时间】:2014-02-06 22:59:20 【问题描述】:

我正在尝试破解一个不提供 clearChart 方法的图形库 (https://github.com/KirillM/BarChart)。因此,如果可能的话,我正在考虑将所有内容都转换为白色像素。

我知道您可以为要重新加载的视图设置一个标志:

[self.myView setNeedsDisplay];

这几乎就在那里,但理想情况下我不想深入图书馆: Clear UIView of drawing?

【问题讨论】:

您可以尝试删除所有子视图:[[yourView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];。摘自问题:***.com/questions/2156015/remove-all-subviews 【参考方案1】:

每次绘制视图时都会“清除”视图——在调用-drawRect: 之前,视图实际上已被擦除,-drawRect: 方法会绘制视图所代表的任何内容。如果您希望图表绘制其他内容而不是那里的内容,您可能需要更改您提供给它的数据。

如果您能说出您正在使用的什么 库,这会有所帮助,但人们会期望某种方法来设置图表绘制的数据。尝试使用图表所期望的任何内容的 null 版本调用该方法——也许它是一个空数组,nil,或者类似的东西。

【讨论】:

肯定是好主意。我尝试了 nil 策略但没有成功。我正在使用github.com/KirillM/BarChart 咳嗽 仅当没有人将clearsContextBeforeDrawing 设置为NO 时;如果设置,则上下文内容将在drawRect: 上未定义,因为UIViews 可能会在内存不足警告等期间转储内容。【参考方案2】:

我发现从条形图模块中删除所有子视图可以解决问题: Remove all subviews?

  [[plotView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

【讨论】:

以上是关于如何破解子视图的清除?的主要内容,如果未能解决你的问题,请参考以下文章

聊天视图中的重复消息。如何清除视图?

如何清除视图中的所有数据并重新加载?

如何清除数据网格视图

如何清除视图框架

如何在后台清除应用程序的所有子视图

使父视图的宽度成为最小孩子的宽度?