2012-06-22 15 views
9

मेरे पास एक बटन है जिसे मैं गायब करना चाहता हूं अगर बटन के अलावा कुछ भी टैप किया गया हो। कार्रवाई: हटाएँ बटन के लिए:क्या टैप जेस्चर रिकॉग्नाइज़र द्वारा बटन टैप इवेंट ओवरराइड हो जाता है?

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

युक्त देखने के लिए टैप जेस्चर पहचानकर्ता जोड़कर बाद में पीछा किया:

[self.superview addGestureRecognizer:self.tapOutsideDelete]; 

जब मैं ऐसा करते हैं, deleteButton के लिए कार्रवाई है तो मैं लक्ष्य रखा निष्पादित नहीं किया गया, जैसे कि बटन टैप पहचाना नहीं गया है। इशारा पहचानकर्ता इस मामले में काम करता है। लेकिन जब मैं डिलीट बटन टैप करता हूं तो यह भी काम करता है, जो मुझे लगता है कि टैप इशारा पहचानकर्ता को बटन टैप पर प्राथमिकता है।

यदि मैं इशारा पहचानकर्ता को हटा देता हूं, तो हटाएं बटन सही तरीके से काम करता है।

मैं स्पष्ट रूप से समझ नहीं पा रहा हूं कि इन दो घटनाओं को एकसाथ कैसे संभालना है। मुझे क्या करना चाहिये?

(हटाएं बटन एक टेबल व्यू सेल के डिलीट बटन की नकल कर रहा है, लेकिन इस मामले में मेरे पास हेडर व्यू में है। मैं डिलीट बटन को गायब होने के लिए एक विधि कॉल करने की उम्मीद करता हूं जब मैं तालिका में कहीं भी टैप करता हूं बटन स्वयं, उसी तरह से यह एक सेल में काम करता है।)

+0

आप weirdness स्वयं के बजाय self.superview को इशारा पहचानकर्ता जोड़ने का एक सा (या self.view अगर यह एक दृश्य नियंत्रक है) प्राप्त कर सकते हैं: आप gestureRecognizer:shouldReceiveTouch: विधि को लागू करने की जरूरत है। यह उस तालिकादृश्य में जोड़ देगा जिसमें हेडर व्यू के बजाय हेडर व्यू शामिल है, जो आपके इरादे से हो सकता है या नहीं भी हो सकता है। – MusiGenesis

+0

[इशारा पहचानकर्ता और बटन क्रिया] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4825199/gesture-recognizer-and-button-actions) –

उत्तर

12

हां, टैप इशारा टैप पर पहली दरार हो जाता है।

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
      shouldReceiveTouch:(UITouch *)touch { 

    if (touch.view == self.deleteButton) { 
     return NO; 
    } 
    return YES; 
} 
+2

धन्यवाद। यह पूरी तरह से काम किया। यह पता लगाने के लिए थोड़ा खुदाई हुई कि यह UIGestureRecognizerDelegate प्रोटोकॉल का एक प्रतिनिधि तरीका है, इसलिए प्रतिनिधि सूचक भी सेट किया जाना चाहिए। – Jim

+0

@Jim: क्षमा करें, मैं इसे जोड़ने जा रहा था। यह निराशाजनक है कि वेब पर कितने आईओएस ट्यूटोरियल इत्यादि में * सभी * एक समाधान के लिए आवश्यक जानकारी नहीं है, और मैंने अभी इसमें जोड़ा है। – MusiGenesis