47

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

4

5 回答 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 命令中,更改scrollviewself.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 回答