2012-03-21 32 views
4

我有一個表視圖。有些單元格可能有圖像,我通過UIImageView將這些圖像添加到單元格中。這些圖像反應並打開新的視圖控制器,如果用戶點擊它(而不是單元格)。圖像大小不同。UITapGestureRecognizer部分工作在UITmageView裏面的UIImageView

我將UITapGestureRecognizer添加到UIImageView,但它的行爲很奇怪。我認爲imageView的整個區域會對手勢做出反應,但我只看到一些較小的區域,並且在這個區域的所有圖像上位置不同。

下面是從細胞初始化代碼:在不同的方向正確顯示

- (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:cellF orRowAtIndexPath:方法我所有需要的數據傳遞到細胞,所以整個配置將在layoutSubviews

你能幫我找出爲什麼自來水手勢反應的區域是隨機和奇怪的定義爲所有imageViews,儘管所有內容都顯示正確?

回答

4

經過長長的想法清單,我終於找到了奇怪行爲的原因。它可以幫助任何有類似問題的人。

在這個項目中,我繼承了UITableViewCell。由於所有單元格的大小可能不同,因此我在tableView:heightForRowAtIndexPath:方法中提供了正確的高度。

但是,在我的自定義單元初始化方法中,我沒有設置適當的自動識別掩碼。這導致UITableViewCellContenView視圖具有恆定的44pt高度。這個觀點是所有細胞內容的超級觀點。

我不知道爲什麼儘管它的所有單元格內容都正確顯示並且尺寸合適,但是所有手勢都只在這個44pt高度區域內達到了imageView。

設置

self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
在自定義的UITableViewCell init方法

我解決了這個問題。

+0

我有同樣的問題,uitableviewcells很奇怪的行爲 – Pascalius 2012-10-04 12:29:52

+0

謝謝! 在一張表中,我使用了'tableView:didSelectRowAtIndexPath'回調,即使在自定義高度時也能正常工作。但是當我在另一個表格中使用輕敲識別器時,我得到了這種奇怪的行爲。 – 2014-05-20 15:34:51

+0

這個錯誤也發生在UICollectionViewCell中,也可以通過這個答案修復。奇怪的是,這個錯誤只發生在我用Xcode 6 beta構建我的應用程序並在iOS 7中啓動應用程序時發生。iOS 8完全沒問題。或者,如果我用Xcode 5構建我的應用程序,那也可以。 – 2014-08-16 01:23:49

相關問題