web-dev-qa-db-ja.com

UITablevlewCell内のUIImageViewのUITapGestureRecognizerが呼び出されない

現在、UIImageViewを含むカスタムUITableViewCellがあり、UIImageViewにUITapGestureRecognizerを追加しようとしていますが運がありません。これがコードのスニペットです。

//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のセルとスーパービューにもuserInteractionEnabledを設定しましたが、それでもうまくいきません。ヒントはありますか?

[〜#〜]編集[〜#〜]

また、cell.selectionStyle = UITableViewCellSelectionStyleNone;によってセルの選択を削除しました。これは問題になる可能性があります

30
Herman

UIImageViewのユーザーインタラクションはデフォルトでは無効になっています。タッチに応答するには、明示的に有効にする必要があります。

imageView.userInteractionEnabled = YES;
102
EmptyStack

Swift

これは私のために働いた:

self.isUserInteractionEnabled = true
3
ƒernando Valle

私の場合、次のようになります。

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