如何从UIScrollview中删除所有子视图?
答案 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);