2013-10-11 40 views
-1

我一些UIViews添加到我的視圖中使用下面的方法:RemoveFromSuperview具體意見

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

所以,我可以有很多的myStickerViewself.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

我同意,我想我在代碼示例之後提到了你的意思。如果是我,我會有一個引用所有貼紙的「insertedStickerView」數組。我認爲所有貼紙都具有這一行的共同超視圖[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)]達到結果。