2011-02-15 9 views
17

बंद करता है मेरे पास UILongPressGestureRecognizer को UIButton में जोड़ा गया है। जब मैं UIButton दबाता हूं तो यह अपेक्षित के रूप में हाइलाइट किया जाता है। हालांकि, जब UILongPressGestureRecognizer चयनकर्ता को हाइलाइटिंग कहा जाता है उसे बंद कर दिया जाता है।UILongPressGestureRecognizer यूआईबटन हाइलाइटिंग

UILongPressGestureRecognizer *longpressGesture = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self 
              action:@selector(longPressHandler:)]; 
    longpressGesture.minimumPressDuration = 5; 
    [longpressGesture setDelegate:self]; 
    [self.myUIButton addGestureRecognizer:longpressGesture]; 
    [longpressGesture release]; 

    - (void)longPressHandler:(UILongPressGestureRecognizer *)gestureRecognizer { 
    NSLog(@"longPressHandler"); 
} 

उपरोक्त उदाहरण में, चयनकर्ता को बटन दबाए रखने के 5 सेकंड के बाद बुलाया जाता है। चयनकर्ता को बुलाए जाने से पहले बटन को हाइलाइट किया जाता है, लेकिन जब चयनकर्ता को बुलाया जाता है तो उसे बिना हाइलाइट किया जाता है, भले ही मैं अभी भी बटन दबा रहा हूं।

क्या कोई यह समझा सकता है कि ऐसा क्यों होता है, और इसे कैसे रोका जा सकता है? मैं बटन दबाए जाने पर पूरे समय हाइलाइट करना चाहता हूं। धन्यवाद।

उत्तर

37

आगे के शोध के बाद, मैंने पाया कि यह डिफ़ॉल्ट व्यवहार के कारण है जेस्चर रिकॉग्नाइज़र का, जो एक संकेत को पहचानने के बाद पदानुक्रम में छूता है। तो, एक बार इशारा पहचानकर्ता एक जेस्चर को पहचान, यह यूआई बटन है, जो तब हाइलाइट नहीं किया गया हो जाता है करने के लिए स्पर्श, रद्द के बाद से यह अब एक स्पर्श घटना है।

यह व्यवहार cancelsTouchesInView संपत्ति

longpressGesture.cancelsTouchesInView = NO; 

नहीं के रूप में सेट का उपयोग कर प्रत्युत्तर श्रृंखला के माध्यम से संपर्क पारित करेंगे बदला जा सकता है।

+0

लेकिन यह touchUpInside के लिए चयनकर्ता कॉल करेंगे। इसे कैसे रोकें ?? – user1010819

0

यह कुछ हद तक काल्पनिक है ..: मुझे लगता है GestureRecognizer की फायरिंग प्रत्युत्तर श्रृंखला है, जो यह ढीला फोकस करता है में बटन हो रहा है। मैं इसे रोकने के किसी भी तरीके से नहीं सोच सकता, लेकिन कुछ कामकाज हो सकते हैं:

  • लंबे प्रेस हैंडलर विधि में दबाए गए राज्य को दिखाने के लिए बटन में हेरफेर करें। यह करने के लिए यह एक बहुत गंदा तरीका है।
  • इशारा पहचानकर्ता का उपयोग न करें। इसके बजाय, तुरंत जब बटन दबाया गया है एक टाइमर जो 5 सेकंड के बाद कुछ चयनकर्ता बुला रहा है बनाएँ। यदि समय बीत जाने से पहले बटन जारी किया जा रहा है, तो बस टाइमर को अमान्य करें। यह एक और अधिक "साफ" समाधान होना चाहिए, हालांकि, यदि आप इशारा पहचानकर्ता का उपयोग करने के लिए निर्धारित हैं, तो यह मदद नहीं करेगा ..
संबंधित मुद्दे