47

UIScrollviewからすべてのサブビューを削除するにはどうすればよいですか?

4

5 に答える 5

126

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()
}
于 2010-11-04T23:47:12.680 に答える
35

スクロールインジケーターバーを削除しないように注意する必要があると思います。

Adam Koによって提供されたコードは短くエレガントですが、水平および垂直のスクロールインジケーターが削除される可能性があります。

私は通常します

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

UIImageViewを手動でスクロールに追加していないと仮定します。

于 2010-11-05T08:11:47.077 に答える
2

Ricardo de Cilloに加えて、私の場合、削除したいサブビューにimageviewsがあるテーブルビューがありました。

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

!の削除 ifコマンドで、すべての画像を削除するように変更scrollviewself.tableviewますが、テーブルビューはそのままにしておきます。

于 2014-06-01T09:19:47.187 に答える
1

scrollview.subviewsのuiimageviewsを削除し、垂直方向と水平方向のインジケーターも保持したい場合。特別な「タグ」を設定して、ビューを識別し、タグがデフォルトで0である垂直および水平インジケーターを除外できます。

于 2013-07-24T01:57:50.920 に答える
0

以前の回答からのSwiftの簡潔なバージョンを補完する(Swift 3.0対応):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
于 2016-09-13T05:58:56.290 に答える