2012-04-24 17 views
7

मेरे पास एक UIGestureRecognizer है कि मैं दो अलग-अलग UIViews पर काम करना चाहता हूं, जिनमें से दोनों UiViewController के समान दृश्य पदानुक्रम में हैं। UIGestureRecognizer की क्रिया प्रत्येक के बारे में समान है, इसलिए मैं उसी फ़ंक्शन को कॉल करना चाहूंगा (यह स्पष्ट रूप से होगा) और मैं रनटाइम पर बताउंगा कि UIViews के साथ मैं किससे व्यवहार कर रहा हूं। पर कैसे? मैं नहीं देख सकता कि UIGestureRecognizer इसके साथ ऑब्जेक्ट जानकारी ले रहा है। क्या मुझे प्रलेखन में रेखा याद आ रही है या इशारा करता है रेगुग्नाइज़र यह नहीं जानता कि यह किस वस्तु से जुड़ा हुआ है जिसे इसे बुलाया जा रहा है? ऐसा लगता है कि भाषा के बिंदु की तरह यह पता चल जाएगा।क्या UIGestureRecognizer जानता है कि इसे किस ऑब्जेक्ट पर बुलाया जाता है?

वैकल्पिक रूप से, शायद मैं वर्ग के इरादे गलत समझ और कर रहा हूँ मैं नहीं करना चाहिए:

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
             action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTap]; 
[viewB addGestureRecognizer: dblTap]; 

और उसके बाद करने में सक्षम होने की उम्मीद: वास्तव में UIGestureRecognizer किया जा रहा है का समर्थन नहीं करता

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer 
{ 
    if (viewA)... 

हैं एक साथ कई वस्तुओं से जुड़ा हुआ है, तो, यदि आप जानते हैं कि यह इसका समर्थन क्यों नहीं करता है, तो क्या आप मुझे शिक्षित कर सकते हैं? सहायता के लिए धन्यवाद।

+1

@NJones बुला सही है। प्रति पहचानकर्ता एक दृश्य। आप प्रत्येक पहचानकर्ता के लिए एक टैग भी सेट कर सकते हैं यह पता लगाने के लिए कि कौन सा पहचानकर्ता उस विधि को बुलाता है। –

उत्तर

21

मानक प्रति पहचानकर्ता एक दृश्य है। लेकिन आप अभी भी एक हैंडलर विधि का कुशलता से उपयोग कर सकते हैं।

तुम इतनी तरह recognizers का दृष्टांत होगा:

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapViewA]; 

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)]; 
[viewB addGestureRecognizer: dblTapViewB]; 

फिर अपने हैंडलर विधि की तरह कुछ दे सकता है:

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{ 
    if (tapRec.view == viewA){ 
     // double tap view a 
    } else if (tapRec.view == viewB) { 
     // double tap view b 
    } 
} 
+0

यह मेरे लिए अच्छी तरह से समझाया गया था। धन्यवाद। – StoneBreaker

-1
UITapGestureRecognizer *dblTapA = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapA]; 

UITapGestureRecognizer *dblTapB = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapB]; 
0

आप देखने के लिए एक टैग असाइन कर सकते हैं और फिर बस की तुलना कि टैग करें और कार्रवाई करें।

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[view addGestureRecognizer: dblTap]; 
view.tag = 2000; // set any integer 

और जब

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{ 
    if (tapRec.view.tag == 2000){ 
     // double tap view with tag 
    } 
} 
संबंधित मुद्दे