从UIScrollView中删除所有子视图?
如何从UIScrollview中删除所有的子视图?
让scrollView
成为UIScrollView
一个实例。
在Objective-C中,这非常简单。 只要调用makeObjectsPerformSelector:
就像这样:
Objective-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() }
我想你只需要小心,不要删除滚动指示条。
Adam Ko给出的代码短小而优雅,但可能会删除水平和垂直滚动指标。
我通常这样做
for (UIView *v in scrollView.subviews) { if (![v isKindOfClass:[UIImageView class]]) { [v removeFromSuperview]; } }
使用你没有UIImageView的手动添加到滚动。
除了Ricardo de Cillo之外,在我的例子中,我有一个表格视图,在子视图中有图像视图,我想删除它们。
for (UIView *v in self.tableview.subviews) { if ([v isKindOfClass:[UIImageView class]]) { [v removeFromSuperview]; } }
删除! 在if命令中,并将scrollview
更改为self.tableview
删除所有图像,但保持table view不变。
如果要在scrollview.subviews中删除uiimageviews,并且还想保留垂直和水平指示器。 您可以设置一个特殊的“标签”来标识视图,并排除标签默认为0的垂直和水平指示器。
从以前的答案(Swift 3.0 ready)补充Swift简洁版本:
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }