2011-10-12 18 views
27

Tôi hiện có UITableViewCell tùy chỉnh chứa UIImageView và cố gắng thêm UITapGestureRecognizer trên UIImageView mà không có may mắn. đây là đoạn mã.UITapGestureRecognizer trên UIImageView trong UITablevlewCell không được gọi là

//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"); 
} 

Tôi cũng đã đặt userInteractionEnabled trên ô và superview của UIImageView nhưng vẫn không có may mắn, bất kỳ gợi ý nào?

EDIT:

Tôi cũng đã loại bỏ lựa chọn tế bào bằng cách cell.selectionStyle = UITableViewCellSelectionStyleNone; Đây có thể là sự cố

+0

trước hết, tại sao bạn không sử dụng UIButton thay vì chế độ xem hình ảnh? Thứ hai, bạn có bật tương tác người dùng cho chế độ xem hình ảnh thực tế không? – Rog

+0

@Rog 'cus Tôi muốn sử dụng chức năng UIViewContentModeScaleAspectFit của UIImageView, UIButton có chức năng giống nhau không? – Herman

+0

Ngoài ra khi sử dụng UIControl trong scrollview nó chặn di chuyển khi chạm vào bắt đầu ... – JakubKnejzlik

Trả lời

98

Số lượt truy cập của UIImageView là bị tắt theo mặc định. Bạn phải kích hoạt nó một cách rõ ràng để làm cho nó phản ứng với chạm.

imageView.userInteractionEnabled = YES; 
+2

Tôi đã làm điều đó nhưng vẫn không có may mắn – Herman

+0

làm việc cho tôi ... cảm ơn !! – samfisher

+1

Có thể bạn có UIView ở trên nó? –

0

Trong trường hợp của tôi có vẻ như:

- (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; 
} 

Và selector:

- (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

Swift 3

này đã làm việc cho tôi:

self.isUserInteractionEnabled = true