से सभी वस्तुओं को हटाने के लिए मूल रूप से मैं एक UIScrollView से सभी वस्तुओं को हटाना चाहते हैं और मुझे नहीं अभी तक यह करने के लिए एक समाधान मिल गया है क्योंकि एक साधारण "removeAllObjects" कमांड काम नहीं करता। क्या किसी को पता है कि इसे कैसे करना है?iPhone: एक UIScrollView
उत्तर
भी आसान:
[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
की गणना करते समय सबव्यूव को निकालना निश्चित रूप से सुरक्षित है, मुझे लगता है कि सरणी को संशोधित करते समय सबव्यू के माध्यम से लूपिंग के संबंध में आपको 'makeObjectsPerformSelector' के साथ एक ही समस्या है। इस तरह से कई लोगों द्वारा सुरुचिपूर्ण और उपयोग किया जाता है, लेकिन आप किस प्रोजेर को ऊपर लाए हैं, इसका पता कैसे लगाते हैं? – iwasrobbed
मुझे यकीन है कि makeObjectsPerformSelector: प्रत्येक ऑब्जेक्ट पर चयनकर्ता को कॉल करने से पहले एक अस्थायी सरणी उत्पन्न करता है। यदि ऐसा नहीं किया था, के रूप में आप कहते हैं, यह समस्याओं का कारण होगा। – Kalle
सबसे आसान तरीका:
for(UIView *subview in [scrollView subviews]) {
[subview removeFromSuperview];
}
क्या तत्वों के माध्यम से लूपिंग करते समय सरणी सामग्री को संशोधित करना सुरक्षित है? मैं बस सोच रहा हूं ... – progrmr
सामान्यतः यह शायद सबसे अच्छा अभ्यास नहीं है, इसलिए आप हटाने के लिए चिह्नित एक अस्थायी सरणी सेट अप करना चाह सकते हैं। : पी – iwasrobbed
माता-पिता के सबव्यूज संग्रह – ohhorob
दो समाधान हो सकता है, स्क्रॉलबार निकाले बिना:
अपने 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];
}
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 इसलिए जब मैं निम्नलिखित चलाने है। नोट: इस आप विशिष्ट छवि विचारों को रखने के लिए, जबकि एक ही समय में आप स्क्रॉलबार रखना चाहते हैं चाहते हैं, तो काम नहीं करेगा।
एक 'UISubview' के सभी subviews न निकालें। यह स्क्रॉल सूचक विचार उपदृश्य हैं। आप भी उन्हें हटा देंगे। मैं अपने खुद के कंटेनर UIView में अपनी सामग्री विचारों रखें। (इसे जोड़ने और निकालने के दौरान इसे आसान पहुंच के लिए एक ivar के रूप में रखें) – ohhorob