2012-09-20 22 views
14

में इशारा संकेतक हैंडलिंग स्पष्ट रूप से आईओएस 6 उसी स्थिति में स्वचालित रूप से स्थिति को संभालने का प्रयास करता है जब आपके पास एक इशारा पहचानकर्ता और UIButton उसी स्थान पर सक्रिय होता है।आईओएस 6

इस नई स्वत: हैंडलिंग मुद्दे को हल करती है जब आप बटन क्लिक करने के लिए संकेत के पहचानकर्ता को सक्रिय करने के बजाय चाहते हैं, लेकिन एक नई समस्या बनाता है जब आप इशारा पहचानकर्ता कार्य करना चाहते हैं।

iOS 5 में आप को लागू कर सकते हैं:

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

जब एक संघर्ष में UIButton करने के लिए कार्रवाई हस्तांतरण करने के लिए।

यह आईओएस 6 में काम नहीं करता प्रतीत होता है। इसके अलावा, इस विधि के व्यवहार को बदलना (क्योंकि अब UIButton को इशारा पहचानकर्ता की बजाय प्राथमिकता है) काम नहीं करेगा।


पूरा विधि:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([touch.view isKindOfClass:[UIControl class]]){ 
     return NO; 
    } 
    return YES; 
} 
+0

आपके पास uigesturerec है एक यूवीव्यू पर ओग्नाइज़र जिसमें यूब्यूटन सबव्यूव है और बटन के बजाए स्पर्श करने के लिए इशारा पहचानकर्ता चाहते हैं? – Ahti

+0

हां। वास्तव में यह कोशिकाओं के भीतर 'UIButtons' के साथ' UITableView' है, और मैं बटन के बजाय इशारा पहचानकर्ता को सक्रिय करना चाहता हूं। – jturolla

+0

क्या आईओएस ने इसे मूल रूप से वापस नहीं किया है? मुझे हमेशा एक बटन के नीचे मारने में समस्याएं होती हैं। –

उत्तर

6

मैं ऐसा करने के बाद इस मुद्दे को वैकल्पिक हल के लिए इसे बदल आप मनचाहे ढंग से: बटन में

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
     [self MyCommonSelector];// this will work for ios 5 
     return Yes; 
} 

जोड़ें लक्ष्य हैं, जहां आपने घोषित इस iOS 6 में कॉल करेगा:

[self.myButton addTarget:self action:@selector(MyCommonSelector) 
    forControlEvents:UIControlEventTouchUpInside]; 

इस विधि में अपनी सामग्री करें जिसे बटन टैप पर भी कॉल किया जाएगा और आपको संकेत देने के लिए जेश्चर से भी कहा जाएगा:

-(void)MyCommonSelector 
{ 
    //Do your stuff here what you want to do with Gesture too. 
} 
0

हालांकि मैं तुम क्यों UIButtons वहाँ डाल अगर तुम उन्हें टैप किया जा नहीं करना चाहते हैं पता नहीं है, आप अधिभावी द्वारा अंतिम रूप को प्राप्त करने से रोका जा सकता है subviews आपके युक्त दृश्य के -hitTest:withEvent: विधि।

-hitTest:withEvent: डिफ़ॉल्ट रूप से "(अपने आप सहित) दृश्य पदानुक्रम में रिसीवर की सब से अधिक दूर वंशज है कि एक निर्दिष्ट बिंदु शामिल है" देता है, तो डिफ़ॉल्ट रूप से जब बटनों में से एक दोहन, अपने युक्त दृश्य बटन वापसी होगी ।

आपका कार्यान्वयन कुछ इस तरह दिखना चाहिए:

- (UIView *)hitTest:(CGPoint)aPoint withEvent:(UIEvent *)event { 
    if ([self pointInside:aPoint]) { 
     return self; 
    } else { 
     return nil; 
    } 
} 

इसलिए यदि आपके कंटेनर दृश्य इस पर बुलाया जा रहा है स्पर्श की बात शामिल है, यह अपने आप में और इशारा पहचानकर्ता इसे से जुड़े रिटर्न स्पर्श मिल जाएगा ।

क्योंकि यह कार्यान्वयन कभी भी कोई सबव्यू नहीं देता है, यूआईबटन को कभी भी छूने का जवाब देने का मौका नहीं मिलेगा।

+0

यह एक अच्छा विचार नहीं बन गया। – jturolla

+2

क्या आप साझा करना चाहते हैं * क्यों *? – Ahti

+0

मेरे पास "पॉपअप" में एक बटन है जो मैं इस विधि के माध्यम से छुपा रहा हूं। यह बटन काम नहीं करेगा। – jturolla

0

मुझे पता है कि यह सरल लगता है, लेकिन क्या आपने UIButton की उपयोगकर्ता इंटरैक्शन सक्षम संपत्ति को "नहीं" पर सेट करने पर विचार किया है? इसे हिट परीक्षण और इशारा पहचान प्रणाली से स्वचालित रूप से हटा देना चाहिए।

+0

यह अब एक अच्छा रास्ता है। – jturolla

+0

तो आप मुझे सही के रूप में चिह्नित कर सकते हैं? – thebarcodeproject

+0

मुझे बहुत खेद है, मुझे लगता है कि यह एक अच्छा रास्ता नहीं है। – jturolla