如何从 UIScrollview 中删除所有子视图?
问问题
27627 次
5 回答
126
让scrollView
成为 的一个实例UIScrollView
。
在 Objective-C 中,这很容易。只需调用makeObjectsPerformSelector:
,如下所示:
目标-C:
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
在 Swift 中,您无法获得运行时访问权限,因此您必须自己实际处理迭代。
迅速:
一个简洁的版本,来自这里:
scrollview.subviews.map { $0.removeFromSuperview() }
一个更具描述性的方法(从这里)假设scrollview.subviews
:
let subviews = self.scrollView.subviews
for subview in subviews{
subview.removeFromSuperview()
}
于 2010-11-04T23:47:12.680 回答
35
我认为您只需要小心,不要删除滚动指示条。
Adam Ko 给出的代码简短而优雅,但它可能会删除水平和垂直滚动指示器。
我通常会
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
假设您没有手动将 UIImageView 添加到滚动中。
于 2010-11-05T08:11:47.077 回答
2
除了 Ricardo de Cillo's,在我的例子中,我有一个表视图,其中包含我想要删除的子视图中的图像视图。
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
的删除!在 if 命令中,更改scrollview
为self.tableview
删除所有图像,但保持表格视图不变。
于 2014-06-01T09:19:47.187 回答
1
如果你想去掉scrollview.subviews中的uiimageviews,并且你还想保留垂直和水平指示器。您可以设置一个特殊的“标签”来识别视图并排除默认标签为0的垂直和水平指标。
于 2013-07-24T01:57:50.920 回答
0
从先前的答案(Swift 3.0 就绪)补充 Swift 简洁版本:
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
于 2016-09-13T05:58:56.290 回答