2014-07-11 4 views
10

मेरे पास UICollectionView है जिसमें इसमें विभिन्न आइटम हैं। जब मैं एक आइटम पर टैप करते हैं, मैं का उपयोग करें:सभी कोशिकाओं के आस-पास रिक्त स्थान में UICollectionView पर स्पर्श कैसे प्राप्त करें

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

यह पता लगाने की क्या छुआ था और उसके बाद मूल रूप से इसे छिपाने के लिए 0 करने के लिए उस दृश्य के अल्फा निर्धारित किया है। यह सब ठीक काम करता है। अब मैं क्या करना चाहता हूं जब आप सभी UICollectionViewCell के आस-पास के सफेद स्थान पर टैप करते हैं तो सभी दृश्य फिर से दिखाई देते हैं। मुझे एक विधि खोजने में परेशानी हो रही है जो मुझे यह जानने की अनुमति देगी कि कोशिकाओं के चारों ओर सफेद जगह को छुआ गया है। क्या ऐसा करने का कोई अच्छा तरीका है? मैंने एक इशारा पहचानकर्ता स्थापित करने का प्रयास किया है, लेकिन जब मैं ऐसा करता हूं, तो मेरी विधि

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

नहीं कहा जाता है। क्या इशारा पहचानकर्ता को लागू करने का कोई तरीका है और वहां से यह निर्धारित करता है कि कोई सेल टैप किया गया था और यदि उस सेल को छुपाएं, तो सभी छिपी हुई कोशिकाओं को दिखाएं? धन्यवाद।

+0

मैं सजावटी विचारों का उपयोग करने और तब टैप सुनने के सुझाव दूंगा क्योंकि वे सेल के पीछे होंगे एल। –

+0

एक सजावटी दृश्य वास्तव में क्या है। मेरे पास संग्रह दृश्य के पीछे एक दृश्य है लेकिन यह स्पर्श को पंजीकृत नहीं करेगा।जब भी वे किसी सेल को स्पर्श नहीं करते हैं तो मुझे उस पृष्ठभूमि दृश्य में छूने पड़ते हैं और मुझे नहीं पता कि –

उत्तर

0

didSelectItem प्रतिनिधि विधि केवल तब कॉल की जाएगी जब उपयोगकर्ता संग्रह ViewCell का चयन करता है। कोशिकाओं के बीच की जगह प्रत्येक सेल आकार के आधार पर भिन्न हो सकती है, आप केवल न्यूनतम रिक्ति निर्दिष्ट कर सकते हैं। स्पर्शों को प्राप्त करने के लिए पूरक के रूप में देखें पृष्ठभूमि के रूप में देखें अपने ज़िन्डेक्स को बदलकर देखें, इसमें स्पर्श पहचान जोड़ें। आशा है कि यह आपकी मदद करेगा। :)

+0

सही तरीके से कैसे करें, इसलिए मैंने यह करने की कोशिश की कि समस्या यह है कि स्पर्शों को पार नहीं किया जाता है पृष्ठभूमि देखें –

15

मैंने backgroundView पर UITapGestureRecognizer का उपयोग कर इस समस्या को ठीक करने में कामयाब रहे हैं। स्विफ्ट में है, लेकिन विचार स्पष्ट है:

self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
self.tapGestureRecognizer.delegate = self 

self.collectionView.backgroundView = UIView(frame:self.collectionView.bounds) 
self.collectionView.backgroundView!.addGestureRecognizer(tapGestureRecognizer) 

और कॉलबैक:

func handleTap(recognizer: UITapGestureRecognizer) { 
    // Handle the tap gesture 
} 
+0

बहुत अच्छा विचार! धन्यवाद! – nonamelive

3

मैं अपने प्रोजेक्ट में एक समान परिदृश्य में पड़ गए और निम्न कार्य करके इसे हल:

let tapGestureRecogniser = UITapGestureRecognizer(target: self, action: #selector(handleTapEmptySpaceGesture)) 
tapGestureRecogniser.delegate = self 
collectionView.addGestureRecognizer(tapGestureRecogniser) 

UIGestureRecognizerDelegate प्रोटोकॉल

लागू करें और फिर निम्न फ़ंक्शन को कार्यान्वित करें प्रोटोकॉल:

func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { 
    // only handle tapping empty space (i.e. not a cell) 
    let point = gestureRecognizer.locationInView(collectionView) 
    let indexPath = collectionView.indexPathForItemAtPoint(point) 
    return indexPath == nil 
} 

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

+0

यह पूरी तरह से काम किया! धन्यवाद! –

0

यह स्विफ्ट 2.3 पर मेरे लिए काम किया

चरण 1: UIGestureRecognizerDelegate प्रोटोकॉल लागू

चरण 2: सेट UITapGestureRecognizer पर UICollectionView backgroundView

चरण 3: संभाल handleTap अंदर नल पर क्या करना है फंक्शन

class namScreenVcc: UICollectionViewController, UIViewControllerTransitioningDelegate, UIGestureRecognizerDelegate 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) 
     tapGestureRecognizer.delegate = self 

     collectionView!.backgroundView = UIView(frame: collectionView!.bounds) 
     collectionView!.backgroundView!.addGestureRecognizer(tapGestureRecognizer) 
    } 

    func handleTap(recognizer: UITapGestureRecognizer) 
    { 
     // Handle the tap gesture 
    } 
} 
संबंधित मुद्दे