2012-11-26 24 views
8

मैं UICollectionView पूरक दृश्य (पाद लेख) में UIButton रखने का प्रयास कर रहा हूं। मैंने UIButton को स्टिकबोर्ड का उपयोग UICollectionViewCell के उप-वर्ग में जोड़ा है और पृष्ठभूमि छवि सहित प्रोग्रामेटिक रूप से इसके गुणों को बदल सकता है। हालांकि, जब मैं बटन की घटना के अंदर टच अप को एक विधि में तार करता हूं, तो यह आग नहीं होता है। वास्तव में, बटन उपयोगकर्ता के स्पर्श के लिए दृश्यता का जवाब भी नहीं दे रहा है। समस्या निवारण में, मैंने संग्रह दृश्य के शीर्षलेख में UIButton जोड़ने और समान व्यवहार देखने का प्रयास किया। एक असंबंधित दृश्य में बटन जोड़ना दबाए जाने पर इंटरैक्शन प्रभाव उत्पन्न करता है।मैं यूआईसीओलेक्शन पूरक दृश्य में यूआईबटन का उपयोग कैसे कर सकता हूं?

क्या यूआईसीओलेक्शन पूरक दृश्य में UIButton को लागू करने के लिए मुझे कुछ खास करने की ज़रूरत है?

उत्तर

16

एक पूरक दृश्य UICollectionReusableView (या इसके सबक्लास) होना चाहिए, UICollectionViewCell नहीं।

वैसे भी, यदि बटन प्रतिसाद नहीं दे रहा है, तो सबसे पहले यह जांचना है कि उसके सभी पूर्वजों के विचार userInteractionEnabledYES पर सेट हैं। एक बार स्क्रीन पर स्क्रीन होने पर डीबगर में रोकें और ऐसा करें:

(lldb) po [[UIApp keyWindow] recursiveDescription] 

सूची में बटन ढूंढें और उसका पता कॉपी करें। फिर आप इसे और प्रत्येक पर्यवेक्षक की जांच कर सकते हैं। उदाहरण:

(lldb) p (BOOL)[0xa2e4800 isUserInteractionEnabled] 
(BOOL) $4 = YES 
(lldb) p (BOOL)[[0xa2e4800 superview] isUserInteractionEnabled] 
(BOOL) $5 = YES 
(lldb) p (BOOL)[[[0xa2e4800 superview] superview] isUserInteractionEnabled] 
(BOOL) $6 = YES 
(lldb) p (BOOL)[[[[0xa2e4800 superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $8 = YES 
(lldb) p (BOOL)[[[[[0xa2e4800 superview] superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $9 = YES 
(lldb) p (BOOL)[[[[[[0xa2e4800 superview] superview] superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $10 = NO 
(lldb) po [[[[[0xa2e4800 superview] superview] superview] superview] superview] 
(id) $11 = 0x00000000 <nil> 

यहाँ मैंने पाया कि रूट (UIWindow) तक सभी दृश्यों isUserInteractionEnabled से YES लौट आते हैं। खिड़की का पर्यवेक्षण शून्य है।

+1

@robmayhoff: मुद्दा यह था कि मैंने गलत माता-पिता को उप-वर्गीकृत किया था। इसे पकड़ने के लिए धन्यवाद! – markdorison

+0

@markdorison हा हा, दिलचस्प। मुझे वास्तव में समस्या होने की उम्मीद नहीं थी। –

+0

@robmayhoff: मैं आश्चर्यचकित था क्योंकि जब आप एक बदलाव करते थे और यह काम करता था! – markdorison

0

मेरे पास एक कस्टम बटन है जो UIControl उप-वर्ग बनाता है और इसे UICollectionReusableView के अंदर रखता है। इसे काम करने के लिए, मैंने नियंत्रण के हर एक सबव्यूव को बनाया और इसके सबव्यूज के सबव्यूज में कोई उपयोगकर्ता इंटरैक्शन नहीं है।

func disableUserInteractionInView(view: UIView) { 
    view.userInteractionEnabled = false 
    for view in view.subviews { 
     self.disableUserInteractionInView(view) 
    } 
} 

// My control has a subview called contentView which serves as a container 
// of all my custom button's subviews. 
self.disableUserInteractionInView(self.contentView) 

कि कोड जोड़ने के बाद से, .TouchUpInside करने के लिए सभी घटना श्रोताओं से निकाल देते थे, और जब नीचे दबाया नियंत्रण नेत्रहीन पर प्रकाश डाला जाएगा।