从UIScrollView中删除所有子视图?

时间:2010-11-04 23:33:00

标签: objective-c iphone uiscrollview subviews

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

5 个答案:

答案 0 :(得分:123)

scrollView成为UIScrollView的实例。

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

<强>目标-C:

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

在Swift中,您没有获得该运行时访问权限,因此您必须自己实际处理迭代。

<强>夫特:

简明版from here

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

执行此操作的更具描述性的方式(来自here)假设为scrollview.subviews

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

答案 1 :(得分:34)

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

Adam Ko给出的代码简洁而优雅,但它可能会删除水平和垂直滚动指示器。

我经常做

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

假设您没有手动将UIImageView添加到滚动中。

答案 2 :(得分:2)

除了Ricardo de Cillo之外,在我的情况下,我有一个表格视图,其中包含我要删除的子视图中的图像视图。

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

补充先前答案(Swift 3.0准备好)中的Swift简洁版本:

$scope.$watch('test', function() {
    $scope.watchCount++
  },true);