我在自定义表格单元格中有一个UITapGestureRecognizer,它不打算执行任何操作(删除点击单元格以选择它的功能)。这很好用,但是单元格中有一些按钮(子视图)无法点击,因为点击手势会处理整个单元格区域。
所以它就像检测触摸手势何时超过其中一个按钮并返回false以取消该特定手势一样简单,对吧?好吧不适合我...
我删除了逻辑,只是在手势识别器中返回NO,但我仍然无法点击按钮。
- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
return NO;
}
我在这里缺少什么?
答案 0 :(得分:3)
解决方案更简单:您不应该使用手势识别器来执行此操作。如果您不想选择单元格,可以做两件事:
-tableView:willSelectRowAtIndexPath:
返回nil
以使其无法选择selectionStyle
设置为UITableViewCellSelectionStyleNone
以删除突出显示效果这样做可以保留按钮功能。
编辑:如果您不想这样做,那么您可以执行您最初尝试的操作 - 除非我认为您的方法名称错误,应该是这样:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
答案 1 :(得分:0)
要做到这一点,我做了一个这样的自定义按钮:
- (void)awakeFromNib
{
[super awakeFromNib];
[self addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchDown];
[self addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside];
[self addTarget:self action:@selector(touchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
}
- (void)touchDown
{
self.imageView.image = [UIImage imageNamed:@"ButtonPressed.png"];
}
- (void)touchUpInside
{
self.imageView.image = [UIImage imageNamed:@"Button.png"];
}
- (void)touchUpOutside
{
self.imageView.image = [UIImage imageNamed:@"Button.png"];
}
- (void)setHighlighted:(BOOL)highlighted
{
return;
}