从UIScrollView中删除所有子视图?

问题描述:

如何从UIScrollview中删除所有子视图?从UIScrollView中删除所有子视图?

+0

__Swift__版[点击这里](http://stackoverflow.com/a/27065076/607368) – 2015-02-11 03:54:49

scrollView成为UIScrollView的实例。

在Objective-C中,它非常简单。只需致电makeObjectsPerformSelector:,就像这样:

的Objective-C:

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

在斯威夫特,你没有得到运行时访问,所以你得亲自处理的迭代。

斯威夫特:

简明版本,from here

scrollview.subviews.map { $0.removeFromSuperview() } 

更具描述性的方式做到这一点(从here)假定scrollview.subviews

let subviews = self.scrollView.subviews 
for subview in subviews{ 
    subview.removeFromSuperview() 
} 
+3

这将删除滚动指示符,如果它们被设置为显示,但OP不关心它们,如下面的注释中所述。 – Jessedc 2013-01-21 00:51:48

+0

+1,真棒..它的只是一个单一的线:) – mAc 2013-02-18 09:32:16

+2

这是在主线程? – Plot 2013-05-20 09:27:46

我认为你必须小心,不要删除滚动指示条。

Adam Ko给出的代码短小而优雅,但可能会删除水平和垂直滚动指标。

我通常做

for (UIView *v in scrollView.subviews) { 
    if (![v isKindOfClass:[UIImageView class]]) { 
    [v removeFromSuperview]; 
    } 
} 

Suposing你没有的UIImageView的手动添加到滚动。

+0

反正我没有使用这些指标。虽然好点。+1 – Moshe 2010-11-05 16:33:53

+0

对于我测试过的代码,我的代码并没有删除滚动指标,我相信这是因为UIScrollView只要需要显示就会加载指标,但这是一个值得注意的好点。 – koo 2010-11-06 10:12:43

+4

其实我认为这不是一个好的解决方案,因为如果你有UIImageView子视图,你想删除什么? – Tony 2012-01-13 00:27:45

如果要在scrollview.subviews中删除uiimageviews,并且还想保留垂直和水平指示器。您可以设置一个特殊的“标签”来标识视图,并排除默认情况下标签为0的垂直和水平指示器。

除了里卡多德西罗的,在我的情况下,我有一个表格视图,在我想删除的子视图中有图像视图。

for (UIView *v in self.tableview.subviews) { 
    if ([v isKindOfClass:[UIImageView class]]) { 
    [v removeFromSuperview]; 
    } 
} 

删除!在if命令中,并将scrollview更改为self.tableview删除了所有图像,但保留了表视图不变。

从以前的答案补充了斯威夫特简洁版(雨燕3.0就绪):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }