2012-08-09 20 views
78

Ben işe yarayabilecek böyle belki bir şey düşünüyordum:Tüm alt görünümleri kendinizden kaldırmanın en iyi yolu nedir?

for (UIView* b in self.view.subviews) 
    { 
     [b removeFromSuperview]; 
    } 

Ben subview her türlü kaldırmak istiyorum. UIImages, Butonlar, Textfields vb.

+1

İşe yaracaktır. Birkaç altyazı katınız varsa ya da belki de yapamazsanız, bunu tekrar tekrar yapmak zorunda kalabilirsiniz. Bunun için ne yapmak istediğinden emin değilim. – Dustin

+0

Bu işe yarıyor mu? "B" lerinin "subviews" dizisinden hızlı bir şekilde kaldırılacağını düşündüm ve bu da yasaklanan bir hızlı numaralandırma döngüsünde bir mutasyona neden oldu. – Mazyod

+2

@Mazyod check subviews property: @property (nonatomic, readonly, copy) NSArray * alt görüntülemeleri - kopya olarak bildirilir, bu yüzden alt görünümleri silerken bu diziyi değiştirmeziz (bir kopyasıdır). – Max

cevap

225
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)]; 

Sizin varyantınızla özdeş, ancak biraz daha kısa.

+0

Bunun dışında ne var - aynı yöntemi kullanarak? @Mazyod – Hemang

+0

makeObjectsPerformSelector arasında bir fark var mı (performansa göre) ve alt görüntüyü kaldırmak için manüel döngü var mı? – Ganesh

6

Swift: Swift içinde

extension UIView { 
    func removeAllSubviews() { 
     for subview in subviews { 
      subview.removeFromSuperview() 
     } 
    } 
} 
13
self.view.subviews.forEach({ $0.removeFromSuperview() }) 

Özdeş sürümü.

1

Bu

//adding an object to the view 
view.addSubView(UIButton()) 

// you can remove any UIControls you have added with this code 
view.subviews.forEach { (item) in 
    item.removeFromSuperview() 
} 

görünümü gibi kullanabilirsiniz sen her şeyi kaldırmak istediğiniz görünümüdür. Her alt görünümü yalnızca işinize yarayacaksınız.

+0

Cevabınızı genişletebilir misiniz? –

+0

Bu, devam ederken bir koleksiyon mutasyona uğratmıyor mu? – mixtly87

İlgili konular