2012-08-09 9 views
78

मैं शायद कुछ इस तरह सोच रहा था काम कर सकते हैं:स्वयं से सभी सबव्यूव को हटाने का सबसे अच्छा तरीका क्या है .view?

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

मैं subview के हर तरह निकालना चाहते हैं। UIImages, बटन, Textfields आदि

+1

के लिए काम करके प्रत्येक सबव्यू को हटा रहे हैं। यदि आपके पास सबव्यूज़ के कई स्तर हैं ... या शायद नहीं, तो आपको इसे फिर से करना पड़ सकता है। मुझे यकीन नहीं है कि आप इसके लिए क्या करना चाहते हैं। – Dustin

+0

यह काम करता है? मैंने सोचा कि 'बी' को तुरंत 'सबव्यूज़' सरणी से हटा दिया जाएगा, जिससे एक तेज गणना लूप के भीतर उत्परिवर्तन हो सकता है, जिसे प्रतिबंधित किया गया है। – Mazyod

+2

@Mazyod चेक सबव्यूज संपत्ति: @property (nonatomic, readonly, copy) NSArray * सबव्यूज़ - इसे प्रतिलिपि के रूप में घोषित किया जाता है, इसलिए जब हम सबव्यूव को हटा रहे हैं तो हम उस सरणी को संशोधित नहीं करते हैं (क्योंकि यह एक प्रति है)। – Max

उत्तर

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

यह आपके संस्करण के समान है, लेकिन थोड़ा छोटा है।

+0

इसे छोड़कर क्या - एक ही विधि का उपयोग कर? @Mazyod – Hemang

+0

क्या MakeObjectsPerformSelector के बीच कोई अंतर (प्रदर्शन द्वारा) है और सबव्यू को हटाने के लिए मैन्युअल रूप से लूप है? – Ganesh

6

स्विफ्ट:

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

स्विफ्ट में समान संस्करण।

1

आप इस

//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() 
} 

दृश्य की तरह उपयोग कर सकते हैं का मानना ​​है कि आप से सब कुछ निकालना चाहते है। आप केवल

+0

क्या आप अपने उत्तर पर विस्तार कर सकते हैं? –

+0

क्या यह एक संग्रह को संग्रहित करते समय संग्रहित नहीं कर रहा है? – mixtly87