iOS - 忽略轻击手势
问题描述:
我有一个自定义表格单元格中的UITapGestureRecognizer,它无意做任何事情(删除点击单元格以选择它的功能)。这很有效,但是在单元格中有一些按钮(子视图),因为轻击手势会处理整个单元格区域,所以无法轻叩。iOS - 忽略轻击手势
因此,它很简单,只要检测触摸手势何时位于其中一个按钮上方,并返回false以取消该特定手势,对吧?那么不适合我...
我已经删除了逻辑,只是在手势识别器中返回NO,但我仍然无法点击按钮。
- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
return NO;
}
有什么我在这里失踪?
答
解决方案更简单:您不应该使用手势识别器来执行此操作。如果你不希望一个小区可以进行选择,你可以做两件事情:从-tableView:willSelectRowAtIndexPath:
- 回报
nil
,使其不可选择 - 设置单元格的
selectionStyle
到UITableViewCellSelectionStyleNone
删除突出显示效果
这样做应该保留你的按钮功能。
编辑:如果你不想这样做,那么你可以做你最初尝试 - 除了我觉得你的方法名错了,应该是这样的:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
答
要做到这一点,我做了这样的自定义按钮:
- (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;
}
我不想删除,选择细胞的能力。用户仍然可以用另一个手势选择它。 – Nippysaurus
@Nippysaurus见我编辑的答案,然后.. – jtbandes
你是绝对正确的。对于很多年来(这一直是我一直存在的问题),我认为人们正在谈论手势识别器的行为......我没有意识到它也可能有一个委托,并且方法签名非常相似:)感谢您花时间为我回答这个问题:) – Nippysaurus