iPhone: Как удалить все объекты из UIScrollView - PullRequest
5 голосов
/ 12 июля 2010

В основном я хочу удалить все объекты из UIScrollView, и я пока не нашел решения, потому что простая команда «removeAllObjects» не работает. У кого-нибудь есть идеи как это сделать?

Ответы [ 4 ]

32 голосов
/ 13 июля 2010

Еще проще:

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
9 голосов
/ 12 июля 2010

Самый простой способ:

for(UIView *subview in [scrollView subviews]) {

    [subview removeFromSuperview];

}
3 голосов
/ 24 мая 2012

Два решения будут без удаления полос прокрутки:

Добавить тег во все ваши подпредставления, удалить их с помощью этих тегов.

Реализация:

Разместитьэто выше вашего класса

#define XPScrollViewSubviewStartTag             100

Когда вы добавляете объекты

for(NSInteger = 0;i<[viewArray count];i++){
     UIView* view = [viewArray objectAtIndex:i];
     view.tag = XPScrollViewSubviewStartTag + i;
     [scrollView addSubview:view];
}

Когда вы позже хотите удалить представления, используйте

for(UIView* view in [scrollView subviews]){
      if(view.tag >= XPScrollViewSubviewStartTag)
           [view removeFromSuperview];
}

Создайте собственный класс UIView

Когда вы хотите удалить представления

for(id view in [scrollView subviews]){
      if(![view isKindOfClass:[CustomView class]])
            continue;

      //not necessary, but just to make things understandable
      CustomView* customView = (CustomView*)view;
      [customView removeFromSuperview];
}
1 голос
/ 12 сентября 2013

Решение Oritm хорошо, но если вы не хотите использовать теги, вы можете вручную удалить, какие виды вы хотите удалить из прокрутки. Предполагается, что вы знаете, какой вид удалить. Например, у моего прокрутки есть только UILabels, поэтому, когда я запускаю следующее:

// This will remove the scrollview but the scrollbars will remain 
for (UIView *subview in [self.detailsExpander.scrollView subviews]) {
    if ([NSStringFromClass([subview class]) isEqualToString:@"UILabel"])
        [subview removeFromSuperview];
}

Это удалит только все метки, но сохранит полосы прокрутки (которые являются видами изображений). Примечание. Это не сработает, если вы хотите сохранить определенные виды изображений, в то же время сохраняя полосы прокрутки.

...