как удалить subviews из scrollview?

как удалить все subviews из моего scrollview …

У меня есть uiview и кнопка над ним в scrollview что-то вроде этого ….

вот мой код для добавления subview в прокрутку

-(void)AddOneButton:(NSInteger)myButtonTag { lastButtonNumber = lastButtonNumber + 1; if ((lastButtonNumber == 1) || ((lastButtonNumber%2) == 1)) { btnLeft = 8;} else if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) { btnLeft = 162; } CGRect frame1 = CGRectMake(btnLeft, btnTop, 150, 150); CGRect frame2 = CGRectMake(btnLeft, btnTop, 150, 150); UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom]; Button.frame = frame1; Button.tag = myButtonTag; [Button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; [Button setBackgroundColor:[UIColor clearColor]]; [Button setBackgroundImage:[UIImage imageNamed:@"WaitScreen.png"] forState:UIControlStateHighlighted]; GraphThumbViewControllerobj = [[GraphThumbViewController alloc] initWithPageNumber:[[GraphIdArray objectAtIndex:myButtonTag]intValue]]; GraphThumbViewControllerobj.view.frame=frame2; GraphThumbViewControllerobj.lblCounter.text=[NSString stringWithFormat:@"%d of %d",myButtonTag+1,flashCardsId.count]; GraphThumbViewControllerobj.lblQuestion.text=[flashCardText objectAtIndex:myButtonTag]; [myScrollView addSubview:GraphThumbViewControllerobj.view]; [myScrollView addSubview:Button]; if ((lastButtonNumber == 2) || ((lastButtonNumber%2) == 0)) { btnTop = btnTop + 162; } if (btnTop+150 > myScrollView.frame.size.height) { myScrollView.contentSize = CGSizeMake((myScrollView.frame.size.width), (btnTop+160));} } 

и вот код для удаления подпунктов

 if(myScrollView!=nil) { while ([myScrollView.subviews count] > 0) { //NSLog(@"subviews Count=%d",[[myScrollView subviews]count]); [[[myScrollView subviews] objectAtIndex:0] removeFromSuperview]; } 

alt text http://sofru.miximages.com/objective-c/www.freeimagehosting.net

Чтобы удалить все подпрограммы из любого представления, вы можете выполнять итерацию по подзонам и отправлять каждый вызов removeFromSuperview :

 // With some valid UIView *view: for(UIView *subview in [view subviews]) { [subview removeFromSuperview]; } 

Тем не менее, это абсолютно безусловное и избавится от всех подсмотров в данном представлении. Если вы хотите что-то более мелкозернистое, вы можете использовать любой из нескольких подходов:

  • Соблюдайте собственные массивы просмотров разных типов, чтобы вы могли отправить их removeFromSuperview сообщениям позже таким же образом
  • Сохраните все свои взгляды, где вы их создаете, и держитесь за указатели на эти виды, поэтому вы можете отправить их removeFromSuperview индивидуально по мере необходимости
  • Добавьте оператор if в указанный выше цикл, проверяя равенство classа. Например, чтобы удалить только все UIButton (или пользовательские подclassы UIButton), существующие в представлении, вы можете использовать что-то вроде:
 // Again, valid UIView *view: for(UIView *subview in [view subviews]) { if([subview isKindOfClass:[UIButton class]]) { [subview removeFromSuperview]; } else { // Do nothing - not a UIButton or subclass instance } } 

Старый вопрос; но поскольку это первый хит в Google для этого, я подумал, что также хочу отметить, что есть и этот метод:

 [[myScrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

Вы не можете выполнить проверку isKindOfClass с этим, но это все еще хорошее решение.

Изменить: Еще один момент, который следует отметить, – это то, что полоса прокрутки scrollview добавляется в качестве подсмотра для этого прокрутки. Таким образом, если вы перебираете все подзоны прокрутки, вы столкнетесь с этим. Если удалить, он снова добавит себя, но важно знать это, если вы только ожидаете, что ваши собственные подclassы UIView будут там.

Поправка для Swift 3:

 myScrollView.subviews.forEach { $0.removeFromSuperview() } 

Чтобы добавить к тому, что сказал Тим, я заметил, что вы помечаете свои взгляды. Если вы хотите удалить представление с помощью определенного тега, вы можете использовать:

 [[myScrollView viewWithTag:myButtonTag] removeFromSuperview]; 

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

 for(UIView *subview in [view subviews]) { [subview removeFromSuperview]; } 

Разве это не должно вызывать исключение, если вы меняете повторяющуюся сборку? http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocFastEnumeration.html#//apple_ref/doc/uid/TP30001163-CH18-SW3

Этот пример может быть лучше.

 NSArray *subviews = [[scroller subviews] copy]; for (UIView *subview in subviews) { [subview removeFromSuperview]; } [subviews release]; 

Проблема с UIScrollView и другими подclassами UIView заключается в том, что они содержат первоначально некоторые виды (например, вертикальную и горизонтальную полосу прокрутки для UIScrollView). Поэтому я создал категорию UIView для удаления фильтров Subviews, отфильтрованных в classе.

Например:

 [UIScrollView removeAllSubviewsOfClass:[FooView class],[BarView class],nil]; 

Код:

 - (void)removeAllSubviewsOfClass:(Class)firstClass, ... NS_REQUIRES_NIL_TERMINATION; - (void)removeAllSubviewsOfClass:(Class)firstClass, ... { NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FALSEPREDICATE"]; va_list args; va_start(args, firstClass); for (Class class = firstClass; class != nil; class = va_arg(args, Class)) { predicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:predicate,[NSPredicate predicateWithFormat:@"self isKindOfClass:%@",class], nil]]; } va_end(args); [[self.subviews filteredArrayUsingPredicate:predicate] makeObjectsPerformSelector:@selector(removeFromSuperview)]; } 

Лучше всего и проще всего использовать

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

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

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

Но иногда крах по-прежнему появляется, потому что makeObjectsPerformSelector: будет перечислять и выполнять селектор. Также в iOS 7 операций ui оптимизированы для работы быстрее, чем в iOS 6, поэтому лучший способ повторить итерацию массива и удалить

 NSArray *vs=[scrollView subviews]; for(int i=vs.count-1;i>=0;i--) { [((UIView*)[vs objectAtIndex:i]) removeFromSuperview]; } 

Примечание: перечисление изменений вреда, но не повторение …

Самый простой и лучший способ –

  for(UIView *subview in [scrollView subviews]) { [subview removeFromSuperview]; } 
 for(subview) in self.scrollView.subviews { subview.removeFromSuperview() } 
  • Как изменить определенный цвет в изображении?
  • Изменить цвет курсора в UITextField
  • Получение случайного объекта из NSArray без дублирования
  • Как запустить UITableView на последней ячейке?
  • Перемещение фигуры Stick, опорных точек, анимации или чего-то еще ...?
  • Как использовать метод prepareForReuse
  • Получение видимого прямоугольника содержимого UIScrollView
  • Обнаружение интернет-соединения iPhone SDK
  • Добавить анимированное изображение Gif в Iphone UIImageView
  • Проблема с кодом: строка формата не является строковым литералом
  • программный доступ к кнопкам громкости iPhone
  • Interesting Posts

    Устранение методов расширения / неопределенность LINQ

    Почему мой компьютер переходит «Новое USB-устройство» каждый раз, когда я подключаю его к другому порту?

    Могу ли я сделать резервную копию своего ПК, а затем спать по требованию с помощью WHS?

    Сколько у вас двоичное представление с фиксированной точкой xxx?

    Рабочий стол Karmic Koala показывает только обои, ничего больше

    Поведение вкладки Firefox – открыта в конце списка, а не рядом с вкладкой нереста?

    Пользователь Null в HttpContext, полученный из StructureMap

    Преодоление беспроводных и проводных адаптеров моего ноутбука

    Перечислить сложную сортировку

    Как объединить видео с файлом PowerPoint?

    Заменить несколько символов в строке в Objective-C?

    «Postfix ops» от Scala

    Как прокручивать в нижней части ScrollViewer автоматически с помощью Xaml и привязки?

    java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener

    Windows 7 – перемещение только файлов заданного расширения при сохранении структуры папок

    Давайте будем гением компьютера.