UIScrollviewからすべてのサブビューを削除するにはどうすればよいですか?
5 に答える
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に加えて、私の場合、削除したいサブビューにimageviewsがあるテーブルビューがありました。
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
!の削除 ifコマンドで、すべての画像を削除するように変更scrollview
しself.tableview
ますが、テーブルビューはそのままにしておきます。
scrollview.subviewsのuiimageviewsを削除し、垂直方向と水平方向のインジケーターも保持したい場合。特別な「タグ」を設定して、ビューを識別し、タグがデフォルトで0である垂直および水平インジケーターを除外できます。
以前の回答からのSwiftの簡潔なバージョンを補完する(Swift 3.0対応):
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }