UITapGestureRecognizer部分适用于UITableViewCell内的UIImageView

时间:2012-03-21 08:48:25

标签: ios uigesturerecognizer

我有一个表格视图。有些单元格可能有图像,我通过UIImageView将这些图像添加到单元格中。如果用户点击它(不是单元格),那些图像会做出反应并打开新的视图控制器。图像大小不同。

我将UITapGestureRecognizer添加到UIImageView,但它很奇怪。我认为imageView的整个区域都会响应手势,但我只看到一些较小的区域,而且在所有图像上,这个区域的位置不同。

以下是来自单元格init的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    UIImageView *thumbnailImageView = [[[UIImageView alloc] init] autorelease];
    thumbnailImageView.tag = CELL_THUMBNAIL_TAG;
    thumbnailImageView.userInteractionEnabled = YES;

    [self.contentView addSubview:thumbnailImageView];

    UITapGestureRecognizer *pictureTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handlePictureTap:)];
    [thumbnailImageView addGestureRecognizer:pictureTap];
    [pictureTap release];

所有带图像的单元格都以不同的方向正确显示 单元格内图像和文本的位置是通过 layoutSubviews 方法完成的:

- (void)layoutSubviews
if (thumbnail) {
    CGRect thumbnailFrame = CGRectMake(contentOrigin.x, contentOrigin.y, thumbnail.size.width, thumbnail.size.height);
    thumbnailImageView = (UIImageView *)[self.contentView viewWithTag:CELL_THUMBNAIL_TAG];
    thumbnailImageView.frame = thumbnailFrame;
    thumbnailImageView.image = thumbnail;

}

tableView:cellForRowAtIndexPath:方法中,我只需将所有必需的数据传递给单元格,因此整个配置将在layoutSubviews中进行

请问您能帮助我找出为什么对所有图像视图进行随机定义并且对所有图像视图都有奇怪定义的区域为什么,尽管所有内容都正确显示?

1 个答案:

答案 0 :(得分:4)

经过长长的一系列想法后,我终于找到了这种奇怪行为的原因。这可能有助于任何有类似问题的人。

在这个项目中,我是UITableViewCell的子类。由于所有单元格的大小可能不同,因此我在tableView:heightForRowAtIndexPath:method中提供了正确的高度。

然而,在我的自定义单元格init方法中,我没有设置正确的自动调整遮罩。导致UITableViewCellContenView视图的常量高度为44pt。此视图是所有单元格内容的超级视图。

我不知道为什么尽管如此,所有细胞内容都正确显示且尺寸合适,但所有手势仅在44pt高度范围内达到了imageView。

设置

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

在自定义UITableViewCell init方法中我解决了这个问题。