2010-07-12 11 views
5

से सभी वस्तुओं को हटाने के लिए मूल रूप से मैं एक UIScrollView से सभी वस्तुओं को हटाना चाहते हैं और मुझे नहीं अभी तक यह करने के लिए एक समाधान मिल गया है क्योंकि एक साधारण "removeAllObjects" कमांड काम नहीं करता। क्या किसी को पता है कि इसे कैसे करना है?iPhone: एक UIScrollView

+3

एक 'UISubview' के सभी subviews न निकालें। यह स्क्रॉल सूचक विचार उपदृश्य हैं। आप भी उन्हें हटा देंगे। मैं अपने खुद के कंटेनर UIView में अपनी सामग्री विचारों रखें। (इसे जोड़ने और निकालने के दौरान इसे आसान पहुंच के लिए एक ivar के रूप में रखें) – ohhorob

उत्तर

32

भी आसान:

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

की गणना करते समय सबव्यूव को निकालना निश्चित रूप से सुरक्षित है, मुझे लगता है कि सरणी को संशोधित करते समय सबव्यू के माध्यम से लूपिंग के संबंध में आपको 'makeObjectsPerformSelector' के साथ एक ही समस्या है। इस तरह से कई लोगों द्वारा सुरुचिपूर्ण और उपयोग किया जाता है, लेकिन आप किस प्रोजेर को ऊपर लाए हैं, इसका पता कैसे लगाते हैं? – iwasrobbed

+0

मुझे यकीन है कि makeObjectsPerformSelector: प्रत्येक ऑब्जेक्ट पर चयनकर्ता को कॉल करने से पहले एक अस्थायी सरणी उत्पन्न करता है। यदि ऐसा नहीं किया था, के रूप में आप कहते हैं, यह समस्याओं का कारण होगा। – Kalle

9

सबसे आसान तरीका:

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

    [subview removeFromSuperview]; 

} 
+0

क्या तत्वों के माध्यम से लूपिंग करते समय सरणी सामग्री को संशोधित करना सुरक्षित है? मैं बस सोच रहा हूं ... – progrmr

+0

सामान्यतः यह शायद सबसे अच्छा अभ्यास नहीं है, इसलिए आप हटाने के लिए चिह्नित एक अस्थायी सरणी सेट अप करना चाह सकते हैं। : पी – iwasrobbed

+1

माता-पिता के सबव्यूज संग्रह – ohhorob

3

दो समाधान हो सकता है, स्क्रॉलबार निकाले बिना:

अपने subviews के सभी में कोई टैग जोड़ें, उन्हें हटाने उन टैग का उपयोग करके।

कार्यान्वयन:

प्लेस यह आपकी श्रेणी से ऊपर

#define XPScrollViewSubviewStartTag    100 

आप वस्तुओं

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

जोड़ते हैं तो आप बाद में नष्ट करने के लिए दृश्यों का उपयोग करना चाहते हैं

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

सर्जन करना एक कस्टम UIView वर्ग

आप विचारों

निकालना चाहते हैं जब
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 के समाधान अच्छा है, लेकिन अगर आप टैग का उपयोग परेशान करने के लिए नहीं करना चाहते हैं, तो आप मैन्युअल निकाल सकते हैं कौन-सा दृश्य आप से निकालना चाहते हैं स्क्रॉलव्यू यह मान लेंगे आप जो दूर करने के लिए देखने को पता है कि।

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

यह केवल सभी लेबल हटाने लेकिन स्क्रॉलबार (जो छवि विचार हैं) रखेंगे: उदाहरण के लिए, मेरी scrollview केवल UILabels इसलिए जब मैं निम्नलिखित चलाने है। नोट: इस आप विशिष्ट छवि विचारों को रखने के लिए, जबकि एक ही समय में आप स्क्रॉलबार रखना चाहते हैं चाहते हैं, तो काम नहीं करेगा।