UIButton सभी लक्षित कार्यों को हटा दें


341

मैंने एक UIButton में कई लक्ष्य-क्रिया-for -ontrolEvents जोड़े हैं: मैं इन सभी को एक ही बार में हटा देना चाहता हूं, बिना कुछ किए। फिर मैं नए लक्ष्य निर्धारित करूंगा।

क्या यह संभव है और मैं इसके बारे में कैसे जाऊँ?

जवाबों:


824

कॉल को हटाएं: कार्रवाई: forControlEvents:, लक्ष्य के लिए nil पास करें, कार्रवाई के लिए NULL, और सभी बिट्स सेट करने वाले नियंत्रण मास्क का उपयोग करें (UIControlEventAllEvents)।

उद्देश्य सी

[someControl removeTarget:nil 
                   action:NULL 
         forControlEvents:UIControlEventAllEvents];

स्विफ्ट 2

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

स्विफ्ट 3

button.removeTarget(nil, action: nil, for: .allEvents)

4
पारितोषिक के लिए धन्यवाद! यहाँ मुझे लगता है कि पूर्ण लिंक है (यानी अनुभाग के लिए): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9

1
progrmr का सुझाव निश्चित रूप से काम करता है। उत्तर में जोड़ने के लिए यहां एक कोड स्निपेट है, जिसकी मुझे आवश्यकता है: [बटन removeTarget: nil क्रिया: NULL FORControlEvents: UIControlEventTouchUpInside];
SK9

6
एक तरफ: -allTargets इंस्टेंस विधि सभी इंस्टेंस के टारगेट का NSSet लौटाता है (यदि कोई नहीं है तो nil)।
SK9

3
उत्तम! वास्तव में मैं क्या देख रहा था: डी
टोटमस मैक्सिमस

1
स्विफ्ट 2 और 3 के साथ अपडेट किया गया, क्योंकि बिल्कुल एक ही उत्तर के साथ प्रतिस्पर्धा करने वाले उत्तर हैं, केवल भाषा में भिन्न हैं।
पीटर डेविस

92

@ स्विफ्ट 2 में प्रोग्रेम का जवाब:

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

और स्विफ्ट 3:

button.removeTarget(nil, action: nil, for: .allEvents)

नोट: स्विफ्ट के पास नहीं है NULL, इसलिए मैंने इसकी जगह परीक्षण किया nilऔर यह ठीक काम करने लगता है।


5
स्विफ्ट 3 के लिए: "। सभी लोग" अब ".allEvents" हैं (लोअरकेस 'a' के साथ):removeTarget(nil, action: nil, for: .allEvents)
Sasho

आपके नोट के बारे में: वास्तव में, मेरा मानना ​​है कि आप ऑब्जेक्टिव-सी में पहली और दूसरी दोनों दलीलों को nilया तो पास कर सकते हैं, और यह काम करेगा। मेरा मानना ​​है कि दोनों को (या बहुत कम से कम, समान के रूप में मूल्यांकन) के रूप में परिभाषित किया गया है। NULL(void*) 0
निकोलस मिआरी

@ साशो मैं कुछ आँकड़े देखना पसंद करूँगा कि स्विफ्ट 3 :-) (नए विधि / तर्क नामकरण नियमों के कारण) में अपग्रेड करते समय स्रोत फ़ाइलों का आकार कितना कम होता है (औसतन)।
निकोलस मियारी

चूंकि यह एक अलग भाषा में एक ही उत्तर है, और इस प्रश्न में भाषा को टैग नहीं किया गया है, इसलिए इसे @ progrmr के उत्तर में संपादित किया जाना चाहिए।
पीटर डेविस

6

स्विफ्ट:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)

कृपया इंगित करें कि आप किस भाषा को कवर कर रहे हैं
जुआन बोएरो

@ JuanPabloBoero, यह तेज है
Iya

3

स्विफ्ट 2:

actionButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

स्विफ्ट 3 और 4:

actionButton.removeTarget(nil, action: nil, for: .allEvents)

उद्देश्य सी:

[actionButton removeTarget: nil action: NULL forControlEvents: UIControlEventAllEvents];

आशा है ये मदद करेगा।


2
- removeTarget:action:forControlEvents:

यह विधि घटनाओं के वितरण को निर्दिष्ट लक्ष्य वस्तु पर रोकती है।

  1. लक्ष्य पैरामीटर में एक मान्य ऑब्जेक्ट निर्दिष्ट करते हुए , यह विधि निर्दिष्ट घटनाओं की डिलीवरी को उस ऑब्जेक्ट से जुड़े सभी एक्शन तरीकों से रोकती है।

  2. लक्ष्य पैरामीटर के लिए शून्य निर्दिष्ट करना , यह विधि उन घटनाओं के वितरण को सभी लक्ष्य वस्तुओं की सभी क्रिया विधियों से रोकती है

    उद्देश्य सी:

    [_myButton removeTarget:  //any validObject (or) nil
                  action:nil
        forControlEvents:UIControlEventAllEvents]; 

    तेजी से:

    myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)

अधिक जानकारी के लिए https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.