2013-01-23 22 views
24

मेरे पास संग्रह दृश्य में कई आइटम हैं, लेकिन उनमें से केवल कुछ ही चयन योग्य होना चाहिए। मैं प्रतिनिधि विधि के साथ इस से निपटने हूँ:UICollectionView चाहिए चयन करें ItemAtIndexPath = NO पुराने चयन को अचयनित करने से नहीं बचा है?

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath 

मेरे समस्या तब होती है, तो एक चयन आइटम का चयन किया जाता है और अगले चरण में किसी न चयन आइटम का चयन लौटने नहीं, चयनित आइटम का चयन रद्द हो जाता है shouldSelectItemAtIndexPath द्वारा अस्वीकार कर दिया गया है वैसे भी।

मैं भी

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath 

उपयोग करने के लिए कोशिश की है लेकिन यह एक ही समस्या है।

क्या यह UICollectionView का सही वांछित व्यवहार है? और यदि हां, तो मैं अपने आखिरी चुने हुए आइटम के चयन से कैसे बच सकता हूं यदि कोई चयन योग्य आइटम नहीं चुना जाता है?

उत्तर

11

मुझे अपनी धारणा को सही करना है: अंतिम चयन अचयनित नहीं किया जाएगा!

चयन पर सेल की उपस्थिति को बदलने के लिए मैंने UICollectionViewCell के सेट सेलेक्टेड एक्सेसर को ओवरराइड कर दिया है। एक गैर-चयन योग्य आइटम का चयन करते समय, एक्सेसर सेट अंतिम चयनित सेल का चयन कई बार कहा जाता है। राज्य के साथ पहले, फिर राज्य के साथ और अंत में फिर से नहीं। आखिरी राज्य सं। ने मेरे सेल को एक गैर चयनित सेल की उपस्थिति को सेट करने का कारण बना दिया।

मुझे इस अजीब व्यवहार का कारण पता नहीं है और न ही मैं इसे हल कर सकता हूं।

मेरा वर्कअराउंड चयनित कक्षों की उपस्थिति को सीधे कंट्रोलर में बदलना है।

सेट में चयनित उपस्थिति:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

चयनित उपस्थिति निकालें:

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 

जांच करें कि वर्तमान सेल चुना गया है और के रूप में इरादा स्वरूप बदलने के।

- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath 

मैंने पाया कि इस काम के रूप में वांछित:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
0

आप कोशिश की है।

+0

-collectionView:shouldSelectItemAtIndexPath: के लिए इस विधि केवल कई विकल्पों के लिए काम करता है का चयन रद्द –

1

आपको प्रतिनिधि विधि में सेल उपस्थिति को बदलना चाहिए था और चयन विधि का चयन करना चाहिए। यदि वापसी में कोई भी नहीं है, तो चयन करें, डीड सिलेक्ट और डीडडिसेलेक्ट नहीं किया जाएगा, इस प्रकार संग्रह दृश्य की स्थिति के अनुरूप होने पर उपस्थिति वही रहेगी।

0

मुझे नहीं पता कि UICollectionViewUITableViewController की तुलना में इस तरह की गन्दा है ... कुछ चीजें जो मुझे मिलीं।

कारण - setSelected: को कई बार कहा जाता है क्योंकि अनुक्रम विधियों को बुलाया जाता है।अनुक्रम UITextFieldDelegate विधियों के समान ही है।

विधि - collectionView:shouldSelectItemAtIndexPath:collectionView से पहले कहा जाता है वास्तव में सेल का चयन करता है क्योंकि यह वास्तव में पूछता है "इसे चुना जाना चाहिए"?

- collectionView:didSelectItemAtIndexPath: वास्तव में collectionView के बाद सेल का चयन किया जाता है। इसलिए नाम "चुना गया था।"

वही चयन के लिए चला जाता है।

टीएल; डीआर - collectionView- selectItemAtIndexPath:animated:scrollPosition: पर कॉल करके प्रतिनिधि विधि - collectionView:shouldSelectItemAtIndexPath: में सेल को अचयनित करें और सभी ठीक होंगे।

0

मुझे बस यही समस्या थी। मैंने विभिन्न समाधानों की कोशिश की और मेरे मामले में काम करने वाले पहले व्यक्ति को फिर से लोड करना था और फिर चयनित कोशिकाओं को संशोधित करना था। यह मेरे लिए काम करता है कि क्या मैंने पूरे संग्रह दृश्य को फिर से लोड किया है या केवल उन कोशिकाओं को जो एक गैर-चयनित उपस्थिति से फंस रहे थे।

प्रयास है कि मेरे लिए काम नहीं किया:

  • सच करने के लिए सेल के selected गुण को सेट, या यहाँ तक कि यह गलत तो फिर सच टॉगल।
  • -selectItemAtIndexPath:animated:scrollPosition: के माध्यम से आइटम का चयन, या इसे -deselectItemAtIndexPath: के माध्यम से भी अचयनित करना और फिर इसे फिर से चुनना।
  • को पुन: लोड बस -reloadItemsAtIndexPaths:
  • -reloadData के साथ सब कुछ फिर से लोड करने के साथ चयनित पंक्तियों।
0

मैंने इसे self.collectionView.allowsMultipleSelection = true सेट करके हल किया।

और हर सूचकांक जब मैं वापस आ सच