【发布时间】:2011-05-05 09:07:34
【问题描述】:
如何从 UIScrollview 中删除所有子视图?
【问题讨论】:
-
Swift 版本是here
标签: objective-c iphone uiscrollview subviews
如何从 UIScrollview 中删除所有子视图?
【问题讨论】:
标签: objective-c iphone uiscrollview subviews
从以前的答案补充 Swift 简洁版本(Swift 3.0 就绪):
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
【讨论】:
让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()
}
【讨论】:
除了 Ricardo de Cillo's,在我的例子中,我有一个表视图,其中包含我想要删除的子视图中的图像视图。
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
删除 !在 if 命令中,将 scrollview 更改为 self.tableview 删除所有图像,但保持表格视图不变。
【讨论】:
如果你想去掉scrollview.subviews中的uiimageviews,并且你还想保留垂直和水平指示器。您可以设置一个特殊的“标签”来识别视图并排除默认标签为0的垂直和水平指标。
【讨论】:
我认为您只需要小心,不要删除滚动指示条。
Adam Ko 给出的代码简短而优雅,但它可能会删除水平和垂直滚动指示器。
我经常这样做
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
假设您没有手动将 UIImageView 添加到滚动中。
【讨论】: