2013-10-11 3 views
-1

добавить некоторые UIViews на мой взгляд, используя следующий метод:RemoveFromSuperview

[self.view addSubview:myStickerView]; // this line is called every time when I select a button from ScrollView. 

Таким образом, я могу иметь много myStickerView на моем self.view.

Теперь, когда я звоню по этой линии: [myStickerView removeFromSuperview]; он удалит только мои последние myStickerView.

Как я могу удалить все UIViews (myStickerView)?

+0

Почему вы не проверяете, содержит ли self.view.subviews myStickerView? – ChrisH

ответ

4

Проще всего было бы что-то вроде этого :

for (UIView *view in self.view.subviews) { 
    if ([view isKindOfClass:[MYStickerView class]) { 
     [view removeFromSuperView]; 
    } 
} 

Или вы можете хранить ссылки для всех вставленных взглядов наклейки не пройти через каждый подвид

+0

Это нехорошее решение. Вам нужно будет сделать рекурсивный поиск, если у вас были представления наклейки в подпунктах основного вида. – JonahGabriel

+0

Согласен, я думаю, я упомянул, что вы имеете в виду сразу после образца кода. Если бы это был я, у меня был бы массив «insertStickerView», который ссылается на все наклейки. Я предположил, что на всех стикерах был общий просмотр из этой строки [self.view addSubview: myStickerView], поэтому для такого случая цикл, проходящий через все подзоны, также является опцией. – dariaa

+0

Эй, это звучит как мой ответ;) – JonahGabriel

3

Самый простой способ - иметь свойство NSMutableArray, которое отслеживает ваши виды наклейки. При добавлении вид наклейки на ваш взгляд, добавить его в массив, а также, что, как вы могли бы сделать что-то вроде этого, когда вы хотите, чтобы удалить все представления наклейки

-(void)removeStickerViews 
{ 
    for(StickerView *stickerView in self.myStickerViewArray) 
    { 
     [stickerView doSomething]; 
     [stickerView removeFromSuperview]; 
    } 
    [self.myStickerViewArray removeAllObjects]; 
} 

-(void)addStickerView:(StickerView *)inStickerView 
{ 
    [self.myStickerViewArray addObject:inStickerView]; 
    [self.view addSubview:inStickerView]; 
} 
+0

Теперь, если в myStickerView есть несколько методов, как я могу получить к ним доступ с помощью цикла? У меня есть метод, который скрывает инструменты редактирования из myStickerView, и я называю его следующим: [myStickerView hideTools]; скажите, пожалуйста, как получить доступ к этому методу для всех стикеров из NSMutableArray? – user2805816

+0

Я обновил ответ для вас. – JonahGabriel

0

идея отслеживания в массиве в порядке, но я предлагаю использовать более элегантный [MyArray makeObjectsPerformSelector: @selector (removeFromSuperview)] для достижения результата.

Смежные вопросы