2011-10-12 16 views
27

मैं वर्तमान में एक कस्टम UITableViewCell जो एक UIImageView शामिल है और कोई भाग्य के साथ UIImageView पर एक UITapGestureRecognizer जोड़ने की कोशिश कर। यहां कोड का स्निपेट है।UITapGestureRecognizer UIImageView पर UITablevlewCell के भीतर नहीं बुलाया हो रही

//within cellForRowAtIndexPath (where customer table cell with imageview is created and reused) 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImageTap:)]; 
tap.cancelsTouchesInView = YES; 
tap.numberOfTapsRequired = 1; 
tap.delegate = self; 
[imageView addGestureRecognizer:tap]; 
[tap release]; 

// handle method 
- (void) handleImageTap:(UIGestureRecognizer *)gestureRecognizer { 
    RKLogDebug(@"imaged tab"); 
} 

मैं भी सेल और UIImageView के superview लेकिन फिर भी प्रयास विफल, किसी भी संकेत पर userInteractionEnabled निर्धारित किया है?

संपादित:

मैं भी cell.selectionStyle = UITableViewCellSelectionStyleNone द्वारा सेल के चयन को दूर किया है; क्या यह एक समस्या हो सकती है

+0

सबसे पहले, आप छवि दृश्य के बजाय UIButton का उपयोग क्यों नहीं कर रहे हैं? दूसरा, क्या आपने वास्तविक छवि दृश्य के लिए उपयोगकर्ता इंटरैक्शन को सक्षम किया? – Rog

+0

@Rog 'cus मैं UIImageView के UIViewContentModeScaleAspectFit फ़ंक्शन का उपयोग करना चाहता हूं, क्या UIButton की समान कार्यक्षमता है? – Herman

+0

स्क्रॉलव्यू में यूआईसींट्रोल का उपयोग करते समय यह स्पर्श शुरू होने पर स्क्रॉलिंग को अवरुद्ध करता है ... – JakubKnejzlik

उत्तर

98

UIImageView का उपयोगकर्ता इंटरैक्शन डिफ़ॉल्ट रूप से अक्षम है। आपको इसे छूने का जवाब देने के लिए इसे स्पष्ट रूप से सक्षम करना होगा।

imageView.userInteractionEnabled = YES; 
+2

मैंने पहले से ही ऐसा किया है लेकिन अभी भी कोई भाग्य नहीं है – Herman

+0

मेरे लिए काम किया ... धन्यवाद !! – samfisher

+1

शायद आपके ऊपर एक UIView है? –

0

मेरे मामले में ऐसा लगता है कि:

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *cellIdentifier = CELL_ROUTE_IDENTIFIER; 
    RouteTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     cell = [[RouteTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:cellIdentifier]; 
    } 

    if ([self.routes count] > 0) { 
     Route *route = [self.routes objectAtIndex:indexPath.row]; 

     UITapGestureRecognizer *singleTapOwner = [[UITapGestureRecognizer alloc] initWithTarget:self 
                        action:@selector(imageOwnerTapped:)]; 
     singleTapOwner.numberOfTapsRequired = 1; 
     singleTapOwner.cancelsTouchesInView = YES; 
     [cell.ownerImageView setUserInteractionEnabled:YES]; 
     [cell.ownerImageView addGestureRecognizer:singleTapOwner]; 
    } else { 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
    return cell; 
} 

और चयनकर्ता:

- (void)imageOwnerTapped:(UISwipeGestureRecognizer *)gesture { 
    CGPoint location = [gesture locationInView:self.tableView]; 
    NSIndexPath *tapedIndexPath = [self.tableView indexPathForRowAtPoint:location]; 
    UITableViewCell *tapedCell = [self.tableView cellForRowAtIndexPath:tapedIndexPath]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:tapedCell]; 
    NSUInteger index = [indexPath row]; 

    Route *route = [self.routes objectAtIndex:index]; 
} 
2

स्विफ्ट 3

यह मेरे लिए काम किया:

self.isUserInteractionEnabled = true 
संबंधित मुद्दे