आप से सभी साक्षात्कारों को हटाने का सबसे अच्छा तरीका क्या है।


87

मैं सोच रहा था कि शायद यह कुछ इस तरह काम करे:

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

मैं हर तरह के सबव्यू को हटाना चाहता हूं। UIImages, Buttons, Textfields आदि।


1
वह काम करेगा। यदि आप कई साक्षात्कार के स्तरीय हैं ... मुझे यकीन नहीं है कि आप इसके लिए क्या करना चाहते हैं।
डस्टिन

यह काम करता है? मैंने सोचा था कि bयह तुरंत subviewsसरणी से हटा दिया जाएगा , जिससे एक तेजी से एन्यूमरेशन लूप के भीतर एक उत्परिवर्तन पैदा होगा, जो निषिद्ध है।
माजिद

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

1
@ मोम: यह गलत है। copyविनिर्देशक का मतलब है कि यह एक प्रतिलिपि बनाता है जब सेट ; पाने के बारे में कुछ भी निर्दिष्ट नहीं है। यह काफी संभावना है कि एक प्रति लौटा दी जाए, लेकिन यह संपत्ति की परिभाषा का हिस्सा नहीं है।
jscs

@ W'rkncacnter सहमत हैं, आप सही कह रहे हैं कि कॉपी कीवर्ड का मूल्य पाने से कोई लेना-देना नहीं है (लेकिन मुझे लगता है कि यह निहित है)।
मैक्स

जवाबों:


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

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


इसके अलावा क्या है - एक ही विधि का उपयोग करना? @ माजूद
हेमांग

वहाँ कोई अंतर है (प्रदर्शन के द्वारा) makeObjectsPerformSelector और मैन्युअल रूप से पाश के बीच सबवूफ़ हटाने के लिए?
गणपत

22
self.view.subviews.forEach({ $0.removeFromSuperview() })

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


7

स्विफ्ट:

extension UIView {
    func removeAllSubviews() {
        for subview in subviews {
            subview.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()
}

दृश्य वह दृश्य है जिससे आप सब कुछ हटाना चाहते हैं। आप केवल forEach करके हर सबव्यू को हटा रहे हैं


क्या आप अपने जवाब पर विस्तार कर सकते हैं?
D --Vᴀʀᴛʜ

क्या इसके माध्यम से पुनरावृति करते हुए यह संग्रह को बदलना नहीं है?
mixtly87

0

स्विफ्ट 4 + के लिए। आप एक एक्सटेंशन बना सकते हैं UIView। जब भी आवश्यक हो इसे बुलाओ।

extension UIView {
    func removeAllSubviews() {
        subviews.forEach { $0.removeFromSuperview() }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.