2013-10-18 13 views
6

टैप करते समय हाइलाइट किया गया है, मैं UICollectionView बना रहा हूं, जहां UICollectionViewCells में से कुछ UITableView हैं।UICollectionViewCell के अंदर UITableView, सभी UITableViewCells को सेल

यह बहुत अच्छा काम करता है, और जब तक मैं UITableView से कहीं और टैप नहीं करता तब तक सब ठीक है। यह setHighlighted विधि को तालिका में सभी UITableViewCells पर कॉल करने का कारण बनता है।

नीचे UICollectionViewCell का एक मोटा स्केच है। UITableView केवल "सेल वन" से "सेल तीन" तक फैलता है। इस तालिका के बाहर कहीं भी टैप करना, लेकिन UICollectionViewCell के अंदर कोशिकाओं को हाइलाइट किया जा सकता है।

------------------------- 
| Title goes here  | 
|      | 
------------------------- 
|      | 
| Cell one   | 
------------------------- 
|      | 
| Cell two   | 
------------------------- 
|      | 
| Cell three   | 
------------------------- 
| Button outside table | 
|-----------------------| 

कॉल स्टैक ऐसा कुछ दिखता है।

[MyTableViewCell setHighlighted:] 
[UICellHighlightingSupport highlightView:] 
UIApplicationMain 
main 

यह सभी कोशिकाओं को UICollectionViewCell आगे एक हाइलाइट कमांड जैसा लगता है।

मैंने setHighlighted विधि को UITableViewCell सबक्लास में ओवरलोड करके और सुपर कार्यान्वयन को कॉल नहीं करके इस मुद्दे के आसपास काम किया। हालांकि यह थोड़ा हैकी लगता है, और मुझे आश्चर्य है कि इस व्यवहार से किसी भी तरह से बचा जा सकता है।

संपादित करें: मुझे लगता है इस व्यवहार जब UICollectionCellView कॉल अपने सभी बच्चों पर setHighlighted से आता है। जो मैं समझता हूं वह ज्यादातर अन्य मामलों में उपयोगी है।

+0

अपने UITableView को उपclass करने का प्रयास करें और खाली सेट जोड़ें हाइलाइट किया गया: इसके लिए विधि। –

+0

"मैंने अपने UITableViewCell सबक्लास में सेट हाइलाइट किए गए विधि को अधिभारित करके और सुपर कार्यान्वयन को कॉल नहीं करके इस मुद्दे के आसपास काम किया। हालांकि यह थोड़ा हैकी लगता है, और मुझे आश्चर्य है कि इस व्यवहार से किसी भी तरह से बचा जा सकता है।" – Nailer

+0

क्या आपने मेरा जवाब देखा? तालिका दृश्य को हाइलाइट करने के लिए केवल संग्रह दृश्य को बताने में समस्या क्या है? – micantox

उत्तर

2

क्या आपने निम्नलिखित UICollectionViewDelegate की विधि को लागू करने का प्रयास किया है?

collectionView:shouldHighlightItemAtIndexPath: 

यदि आप संग्रह दृश्य में अपने UITableView विचारों के लिए कोई वापसी, तो आप जाने के लिए अच्छा होना चाहिए।

+0

एक आकर्षण की तरह काम करता है। इस बारे में नहीं सोचा था। चीयर्स! – Nailer

+3

ध्यान दें कि आईओएस 7.1 में, 'संग्रह दृश्य से कोई वापस नहीं लौटना चाहिए: चाहिए हाइलाइट ItemAtIndexPath:' वास्तव में सेल को चुनने से रोकता है। मैंने एक रडार दायर किया। ओपन रडार दर्पण: http://www.openradar.me/radar?id=5803034198147072 –

1

इस हल करने के लिए, और जब सीधे उपयोग किया तालिका दृश्य सेल हाइलाइट करने की अनुमति है, और अधिभावी collectionView से बचने के लिए: shouldHighlightItemAtIndexPath: के बाद से यह हो रहा से चयन होने से बचाता है, मैं UICollectionViewCell के setHighlighted विधि overrode और प्रकाश डाला है कि उस पर किया उलट मेरी तालिका कोशिकाओं को देखें। इस तरह, संग्रह तालिका चयनित होने पर मेरी तालिका दृश्य कक्ष हाइलाइट नहीं दिखाई देते हैं।

- (void) setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 

    if (highlighted) 
    { 
     dispatch_async(dispatch_get_main_queue(),^
     { 
      for (UITableViewCell* cell in self.tableView.visibleCells) 
       cell.highlighted = NO; 
     }); 
    } 
} 

मैंने हाइलाइटिंग भेज दी क्योंकि ऐसा लगता है कि UICollectionViewCell इसके हाइलाइटिंग में भी देरी करता है। मुझे UICollectionViewCell के बाद होने वाली मेरी हाइलाइटिंग की आवश्यकता है।

संबंधित मुद्दे