2011-08-24 95 views
1

我有一个自定义表格单元格中的UITapGestureRecognizer,它无意做任何事情(删除点击单元格以选择它的功能)。这很有效,但是在单元格中有一些按钮(子视图),因为轻击手势会处理整个单元格区域,所以无法轻叩。iOS - 忽略轻击手势

因此,它很简单,只要检测触摸手势何时位于其中一个按钮上方,并返回false以取消该特定手势,对吧?那么不适合我...

我已经删除了逻辑,只是在手势识别器中返回NO,但我仍然无法点击按钮。

- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch 
{ 
    return NO; 
} 

有什么我在这里失踪?

回答

3

解决方案更简单:您不应该使用手势识别器来执行此操作。如果你不希望一个小区可以进行选择,你可以做两件事情:从-tableView:willSelectRowAtIndexPath:

  • 回报nil,使其不可选择
  • 设置单元格的selectionStyleUITableViewCellSelectionStyleNone删除突出显示效果

这样做应该保留你的按钮功能。


编辑:如果你不想这样做,那么你可以做你最初尝试 - 除了我觉得你的方法名错了,应该是这样的:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
+0

我不想删除,选择细胞的能力。用户仍然可以用另一个手势选择它。 – Nippysaurus

+0

@Nippysaurus见我编辑的答案,然后.. – jtbandes

+0

你是绝对正确的。对于很多年来(这一直是我一直存在的问题),我认为人们正在谈论手势识别器的行为......我没有意识到它也可能有一个委托,并且方法签名非常相似:)感谢您花时间为我回答这个问题:) – Nippysaurus

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; 
}