从UIScrollView中删除所有子视图?
答
让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()
}
答
我认为你必须小心,不要删除滚动指示条。
Adam Ko给出的代码短小而优雅,但可能会删除水平和垂直滚动指标。
我通常做
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
Suposing你没有的UIImageView的手动添加到滚动。
答
如果要在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() }
__Swift__版[点击这里](http://stackoverflow.com/a/27065076/607368) – 2015-02-11 03:54:49