2010-07-12 19 views
5

Temel olarak, UIScrollView öğesinden tüm nesneleri kaldırmak istiyorum ve henüz bir çözüm bulamadım çünkü basit bir "removeAllObjects" komutu çalışmıyor. Kimsenin nasıl yapılacağı hakkında bir fikri var mı?iPhone: UIScrollView öğesinden tüm nesneler nasıl kaldırılır

+3

"UISubview" öğesinin tüm alt görünümlerini kaldırmayın. Kaydırma göstergesi görünümleri alt görüntülemelerdir. Onları da çıkaracaksın. İçerik görünümlerinizi kendi kapsayıcınıza yerleştirmenizi öneririz UIView. (Eklerken ve çıkarırken kolay erişim için bir ivar olarak saklayın) – ohhorob

cevap

32

Daha kolay:

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

numaralandırma sıralarken alt görünümleri kaldırmak için kesinlikle güvenlidir Ben aynı anda diziyi değiştirirken alt görünümler arasında döngü ile ilgili olarak 'makeObjectsPerformSelector' ile aynı sorunu var sanırım. Bu yol zariftir ve birçok kişi tarafından kullanılır, ama yukarıda hangi progrmr'ın ortaya çıktığını nasıl ele alırsınız? – iwasrobbed

+0

Oldukça eminim makeObjectsPerformSelector: her nesne üzerindeki seçiciyi çağırmadan önce geçici bir dizi oluşturur. Eğer söylemediysen, sorunlara sebep olur. – Kalle

9

kolay yolu:

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

    [subview removeFromSuperview]; 

} 
+0

Öğelerin arasında döngü yaparken dizi içeriğini değiştirmek güvenli midir? Sadece merak ediyorum ... – progrmr

+0

Genelde muhtemelen en iyi uygulama değildir, bu nedenle, kaldırılmak üzere işaretlenmiş geçici bir dizi kurmak isteyebilirsiniz. : P – iwasrobbed

+1

Ebeveynlerin alt koleksiyonları – ohhorob

3

İki çözümler kaydırma çubukları çıkarmadan, şöyle olacaktır:

senin subviews tüm etiket ekle, bunları kaldırmak bu etiketleri kullanarak.

Uygulama:

Yeri Bu sınıfın üstünde

#define XPScrollViewSubviewStartTag    100 

daha sonra görüşlerini kullanmak silmek istediğinizde nesneleri

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

eklediğinizde

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

yaratmak Özel bir UIView sınıfı görüşlerini

kaldırmak istediğiniz

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

Oritm çözümü güzel, ama size etiketleri kullanarak rahatsız etmek istemiyorsanız, el ile kaldırmak istediğiniz görünümleri kaldırabilirsiniz scrollview. Bu, hangi görüntünün kaldırılacağını bildiğinizi varsayar.

// 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]; 
} 

Bu yalnızca tüm etiketleri kaldırmak, ancak (görüntü manzarası vardır) kaydırma çubukları tutacak: Aşağıdaki çalıştırdığınızda Örneğin, benim Scrollview sadece bu UILabels vardır. Not: Belirli resim görüntülerini tutmak istiyorsanız, aynı zamanda kaydırma çubuklarını tutmak istediğinizde bu işe yaramaz.

İlgili konular