2014-07-23 5 views
7

के अंदर स्पर्श का पता लगाना मुझे अस्पष्ट है कि मुझे UIGableViewCell के संबंधित सबव्यूव में UIGestureRecognizer कोड जोड़ना चाहिए। मैंने उन सभी संबंधित प्रश्नों को पढ़ा है जिन्हें मैं पा सकता हूं। अभी मेरे सेल और सेल का सबव्यूवेयर सेलफॉररएट इंडेक्सपैथ के अंदर उत्पन्न हुआ है। मैं इस के साथ cellForRowAtIndexPath के अंदर इशारा जोड़ने की कोशिश की है:UITableViewCell सबव्यू

UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[mySubview addGestureRecognizer:tapGesture]; 
tapGesture.cancelsTouchesInView = YES; 
tapGesture.delegate = self; 

बहरहाल, यह कुछ भी नहीं पता लगाता है। मेरा यूआईजीएचर पहचानकर्ता काम कर रहा है यह सत्यापित करने के लिए मैंने टेबल पर उपरोक्त कोड का उपयोग किया है, और यह उम्मीद के अनुसार स्पर्श छूता है। इसके अलावा, जब tableView ऊपर इशारा है नीचे कोड भी कहा जाता है जुड़ा हुआ है किया जा रहा के रूप में उम्मीद:

-(BOOL) gestureRecognizer:(UITapGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    NSLog(@"shouldRevceiveTouch"); 
    return YES; 
} 

- (BOOL)gestureRecognizer:(UITapGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UITapGestureRecognizer *)otherGestureRecognizer 
{ 
    NSLog(@"simultaneously"); 
    return YES; 
} 

मैं tableView से GestureRecognizer दूर करने के लिए कोशिश की है और cellForRowAtIndexPath के अंदर मैं करने के लिए GestureRecognizer संलग्न करने की कोशिश की है सेल स्वयं, इसके किसी भी सबव्यूज, कुछ भी स्पर्श नहीं मिला है। (उपरोक्त कोड में से कोई भी ट्रिगर नहीं किया गया है)

स्पष्ट रूप से मैं जेस्चर रिकॉग्नाइज़र को गलत तरीके से जोड़ रहा हूं। जेस्चर रिकॉग्नाइज़र जोड़ने के लिए कहां/कब उचित स्थान/समय होगा?

धन्यवाद।

+0

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

+1

यदि सबव्यू यूआईएलएबल प्रकार है तो कृपया उपयोगकर्ता इंटरैक्शन गुण को सही बनाएं। – Shubhendu

उत्तर

8

मैंने इसी तरह की चीज की है, लेकिन यह UILongPressGestureRecognizer था। मुझे लगता है कि कोई बड़ा अंतर नहीं है (क्योंकि सभी स्पर्श UITableView द्वारा प्राप्त किए जाते हैं)। मैंने नियंत्रक viewDidLoad विधि (सेल में नहीं) में इशारा पहचानकर्ता जोड़ा है।

- (void) tableViewLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.messageTableView]; 

    NSIndexPath *indexPath = [self.messageTableView indexPathForRowAtPoint:p]; 
    if (indexPath == nil) 
     NSLog(@"long press on table view but not on a row"); 
    else { 
     UITableViewCell *cell = [self.messageTableView cellForRowAtIndexPath:indexPath]; 
     CGPoint pointInCell = [cell convertPoint:p fromView:self.messageTableView]; 
    } 
} 

आप नियमित रूप से एक करने के लिए लंबे समय तक दबाएं बदल सकते हैं और यह अपने आप

+0

धन्यवाद, मैंने इस मार्ग पर जाने का फैसला किया है। यह पता लगाने के दौरान कि क्या बिंदु दृश्य फ्रेम में है, अब मुझे एक अलग समस्या है। बिंदु का पता लगाया गया है यदि मैं फ्रेम के शीर्ष भाग में क्लिक करता हूं, और फ्रेम के ऊपर थोड़ा सा। अब इस पर काम करना – tpdietz

+0

@tpdietz मुझे लगता है कि आप बिंदु को सेल समन्वय स्थान में बदलने की कोशिश कर सकते हैं, लेकिन आवश्यक UIView में। –

+0

शानदार जवाब! – Macondo2Seattle

-2
नहीं

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Do all my cool tap related stuff here for example, get the row that was tapped: 
    UITableViewCell *cell= [tableView cellForRowAtIndexPath:indexPath]; 
    // get your subview (assume its a UIImageView) from cell - one way to do it below 
    UIImageView photo = (UIImageView *)[cell.contentView viewWithTag:PHOTO_TAG]; 
} 

आप अपनी समस्या थोड़ा और आगे तो वर्णन करते हैं शायद मैं अतिरिक्त सुझाव दे सकता हूं।

5

मुझे अपने सेल के अंदर विभिन्न सबव्यूव्स पर स्पर्श का पता लगाने की आवश्यकता थी। आईओएस 9 के UITableViewCellContentView को भी संभालना।

सबसे पहले मैं touchesBegan overrided अपने कस्टम अंदर UITableViewCell

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:touch.view]; 

    // Imagine I have 2 labels inside my cell 
    CGPoint convertedPoint = [self.firstLabel convertPoint:point fromView:touch.view]; 
    if ([self.firstLabel pointInside:convertedPoint withEvent:nil]) { 
     // Touched first label 
     return; 
    } 

    convertedPoint = [self.secondLabel convertPoint:point fromView:touch.view]; 
    if ([self.secondLabel pointInside:convertedPoint withEvent:nil]) { 
     // Touched second label 
     return; 
    } 

    // no labels touched, call super which will call didSelectRowAtIndexPath 
    [super touchesBegan:touches withEvent:event]; 
} 

और हम awakeFromNib ओवरराइड करना चाहिए या सिर्फ somehwere किसी और सेल उपयोगकर्ता intercations को निष्क्रिय आईओएस 9 में समर्थन ठीक करने के लिए करता है, तो सेल नहीं है स्टोरीबोर्ड/xib में:

- (void)awakeFromNib { 
    // Initialization code 
    self.contentView.userInteractionEnabled = NO; 
} 

बेशक हमें अपने लेबल उपयोगकर्ता को सेट करना नहीं भूलना चाहिए nteractions सक्षम।