2012-01-01 26 views
6
[[self.view.window subviews] makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO]]; 

मैं एक और सवाल के जवाब (How to disable touch input to all views except the top-most view?) में इस कोड को देखा और जब यह काम किया यह मुझे हैरान कर दिया, के रूप में setUserInteractionEnabled: एक BOOL (जो के रूप में यह नहीं है एक उद्देश्य-सी वस्तु performSelector:withObject: प्रकार के तरीकों में पारित नहीं किया जा सकता है) की उम्मीद है।एनएसएनंबर को बूल की अपेक्षा करने के तरीके को कैसे पास करना संभव है?

दस्तावेज कहां है कि एक NSNumber पास करना ठीक है? क्या यह सभी विधियों के लिए काम करता है, या एक विशेष कार्यान्वयन की आवश्यकता है? और क्या यह केवल BOOLs के साथ काम करता है, या इसे int जैसे प्रकारों से किया जा सकता है?

+0

[यह खोज] (http://www.google.com/search?q=performSelector:withObject%20nsnumber) समान चीजों की कोशिश करने वाले लोगों के बहुत सारे परिणाम बदलता है, लेकिन मुझे यह उल्लेख नहीं हुआ है एक समाधान, और मैं नहीं देखता कि यह कैसे काम कर सकता है। – Douglas

+0

क्या आप कह रहे हैं कि आपने यह कोशिश की है और यह काम करता है, या आपने किसी को यह कहते हुए देखा है कि यह काम करता है? – jrturton

+0

@jrturton, दो लोगों ने कहा कि यह काम करता है और जब मैंने कोशिश की तो इसका वांछित प्रभाव पड़ा, लेकिन मुझे लगता है कि मुझे पता है कि क्या हुआ ... –

उत्तर

3

यदि आप बस अपना कोड काम करना चाहते हैं, तो ऊपर उठाएं और पॉल.s के उत्तर को स्वीकार करें। यदि आप प्रयोग करने वाले नरसंहारों के बारे में पढ़ना चाहते हैं, तो आगे बढ़ें। टिप्पणियों में मेरे मूल उत्तर में कुछ रोचक चर्चा हुई जो मैंने नीचे संक्षेप में की है।

यह काम नहीं करता है। मैंने इसे आईओएस प्रोजेक्ट में करने की कोशिश की है, userInteractionEnabled प्रॉपर्टी performSelector:withObject: भेजकर प्रभावित नहीं है।

aSelector एक विधि है कि प्रकार आईडी की एक एकल तर्क लेता की पहचान करनी चाहिए: यह NSObject के लिए documentation जिसमें कहा गया है के साथ मेल खाता है। अन्य तर्क प्रकारों और वापसी मानों के साथ विधियों के लिए, एनएसआईएनवोकेशन का उपयोग करें।

अब पौराणिक Peter Hosey एक नमूना नींव उपकरण here बनाया जो bizzarely पर्याप्त काम करता है जब आप एक डबल इसे करने के लिए भी एक नाव के रूप में मैं अपने आप को पता चला गुजरती हैं,।

जिज्ञासा के लिए जिज्ञासा जोड़ने के लिए, यह आईओएस प्रोजेक्ट (डबल या फ्लोट) में काम नहीं करता है।

सारांश में, मुझे लगता है कि हम निम्न कह सकते हैं:

  • यदि यह कभी काम करता है, यह दुर्घटना से काम करता है और पर
  • एक भरोसा नहीं किया जाना चाहिए स्वीकार किए जाते हैं या ढेर अतिप्रवाह पर जवाब upvoted जरूरी नहीं है सही
+0

क्या यह कहीं भी प्रलेखित है? मुझे पता है कि यह केवीसी के लिए दस्तावेज है, लेकिन 'प्रदर्शन चयनकर्ता के साथ: ऑब्जेक्ट:' और दोस्तों के बारे में क्या? –

+0

मुझे नहीं पता, मैं इसके लिए प्रश्नकर्ता शब्द ले रहा हूं कि यह काम करता है, मैं इस समय खुद को जांचने में सक्षम नहीं हूं। – jrturton

+1

यह 10.7.2 पर 'बूल' के साथ मेरे लिए काम नहीं करता है (यह 0 की बजाय रिपोर्टिंग -64 है), लेकिन आश्चर्यजनक रूप से * * डबल 'के साथ काम करता है। –

2

आप ऑब्जेक्ट के रूप में एनएसएनंबर पास नहीं कर सकते हैं और यह दूसरी तरफ एक बूल के रूप में बाहर आ गया है। हालांकि, कुछ कामकाज हैं।

  1. एनएसआईएनवोकेशन का उपयोग करें। आपको एक एनएसएआरएआरई श्रेणी बनाने की आवश्यकता होगी जो एनएसआईएनवोकेशन का उपयोग करे। यह थोड़ा गन्दा है।

  2. एक setUserInteractionEnabled के साथ एक UIView श्रेणी बनाएं:-जैसी फ़ंक्शन (समान नाम के साथ?) जो एनएसएनंबर के साथ काम करता है जो तब सेटयूसर इंटरटेक्शन सक्षम करता है: NSNumber के BOOL मान के साथ। कुछ की तरह:

    @implementation UIView (Additions) 
    - (BOOL)setUserInteractionEnabled2:(NSNumber *)aBool 
    { 
        self.userInteractionEnabled = [aBool boolValue]; 
    } 
    @end 
    
2

मैं आप पहले से ही निष्कर्ष है कि यह काम नहीं करता के लिए आया था लगता है।

@senojsitruc यह कर के विभिन्न तरीकों की एक जोड़ी से पता चलता है, लेकिन सबसे आसान समाधान का नजारा दिखता है

[self.view.window.subviews setValue:[NSNumber numberWithBool:NO] forKey:@"userInteractionEnabled"]; 

NSArray राज्य के लिये दस्तावेज:

setValue: forKey:

का आह्वान setValue: forKey: निर्दिष्ट मान और कुंजी का उपयोग कर सरणी के प्रत्येक आइटम पर।