UITableViewCell点击子视图而不选择单元格

时间:2016-08-03 09:37:50

标签: ios objective-c uitableview uitapgesturerecognizer didselectrowatindexpath

我有一个内置UIImageView imgView的自定义tableviewCell。我将UITapGestureRecognizer添加到imgView中,这样每当我点击它时我都可以更改imgView的图像。但是,当我点击imgView时,didSelectRowAtIndexPath也会被触发。我想要的是:

  • 点击外部imgView:触发器didSelectRowAtIndexPath
  • 点击imgView:Block didSelectRowAtIndexPath时,只需调用手势回调即可更改imgView的图像。

当我点击imgView内部时已经调用了回调函数,但在这种情况下我无法阻止didSelectRowAtIndexPath。我一直在寻找几个小时,但还没有找到解决方案。我正在使用。有人对我的问题有任何想法吗?谢谢大家!

更新

最后我发现了我的错误。

UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onFavouriteIconTapped:)];


tapGesture.cancelsTouchesInView = NO; // this should be YES by default

[_ivImageView addGestureRecognizer:tapGesture];

只需设置cancelsTouchInView = YES即可解决问题。如果值为YES,则ivImageView将使用触摸事件,并且不会选择单元格。希望这能帮助那些遇到同样问题的人。

2 个答案:

答案 0 :(得分:2)

@SHN,你是对的。可能是@meaholik,你错过了这条线。

imageView.userInteractionEnabled = TRUE;

您也可以查看此内容 link

希望它会对你有所帮助。 :)

答案 1 :(得分:0)

你的方法很好。您的点击手势选择器可能未被调用,可能是因为您可能未启用UIImageView的用户交互。

imageView.userInteractionEnabled = TRUE;

对于UIImageView,userInteractionEnabled的默认值为NO。

一旦您的选择器开始被调用,您将获得所需的行为,即点击imgView,点击手势选择器被调用,并且在imgView didSelectRowAtIndexPath之外的触摸将被调用。这符合iOS响应者链规则。