Удалить все подпредставления из UIScrollView? - PullRequest
46 голосов
/ 05 ноября 2010

Как мне удалить все подпредставления из UIScrollview?

Ответы [ 5 ]

123 голосов
/ 05 ноября 2010

Пусть scrollView будет экземпляром UIScrollView.

В Objective-C это довольно просто. Просто позвоните makeObjectsPerformSelector:, вот так:

Objective-C:

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

В Swift вы не получаете такой доступ во время выполнения, поэтому вам придется самостоятельно обрабатывать итерацию.

Swift:

Краткая версия, отсюда :

scrollview.subviews.map { $0.removeFromSuperview() }

Более описательный способ сделать это (с здесь ) предполагает scrollview.subviews:

let subviews = self.scrollView.subviews
for subview in subviews{
    subview.removeFromSuperview()
}
34 голосов
/ 05 ноября 2010

Я думаю, что вы просто должны быть осторожны и не удалять полосы индикаторов прокрутки.

Код, данный Адамом Ко, короткий и элегантный, но он может удалить индикаторы горизонтальной и вертикальной прокрутки.

Я обычно делаю

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

Предположим, что вы не добавили UIImageView в свиток вручную.

2 голосов
/ 01 июня 2014

Помимо Рикардо де Кильо, в моем случае у меня было табличное представление, в котором были изображения в подпредставлениях, которые я хотел удалить.

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

Удаление! в команде if и изменив scrollview на self.tableview удалил все изображения, но оставил представление таблицы без изменений.

1 голос
/ 24 июля 2013

Если вы хотите удалить uiimageviews в scrollview.subviews, и вы также хотите сохранить вертикальные и горизонтальные индикаторы. Вы можете установить специальный «тег» для идентификации видов и исключения вертикальных и горизонтальных индикаторов, теги которых по умолчанию равны 0.

0 голосов
/ 13 сентября 2016

Дополнение краткой версии Swift из предыдущего ответа (готов Swift 3.0):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
...