iOS - 忽略点击手势
Posted
技术标签:
【中文标题】iOS - 忽略点击手势【英文标题】:iOS - ignoring a tap gesture 【发布时间】:2011-08-24 08:20:25 【问题描述】:我在自定义表格单元格中有一个 UITapGestureRecognizer,它什么都不做(删除点击单元格以选择它的能力)。这很好用,但是单元格中有一些按钮(子视图)无法点击,因为点击手势会处理整个单元格区域。
所以它就像检测触摸手势何时超过其中一个按钮并返回 false 以取消该特定手势一样简单,对吧?好吧,不适合我...
我已删除逻辑并在手势识别器中简单地返回 NO,但我仍然无法点击按钮。
- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
return NO;
这里有什么我遗漏的吗?
【问题讨论】:
【参考方案1】:解决方案更简单:您不应该使用手势识别器来执行此操作。如果您不希望某个单元格处于可选状态,您可以做两件事:
从-tableView:willSelectRowAtIndexPath:
返回nil
使其无法选择
将单元格的selectionStyle
设置为UITableViewCellSelectionStyleNone
以移除高亮效果
这样做应该可以保留您的按钮功能。
编辑:如果你不想这样做,那么你可以做你最初尝试的事情——除了我认为你的方法名称错误,应该是这样的:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
【讨论】:
我不想删除选择单元格的功能。用户仍然可以使用其他手势来选择它。 你是绝对正确的。多年来(这对我来说一直是一个持续的问题)我认为人们在谈论手势识别器的动作......我没有意识到它也可以有一个委托并且方法签名是如此相似:)感谢您花时间为我回答这个问题:) 是的,这可能有点令人困惑...您可以为操作自定义方法名称,但委托方法始终相同!【参考方案2】:为此,我制作了一个这样的自定义按钮:
- (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;
【讨论】:
以上是关于iOS - 忽略点击手势的主要内容,如果未能解决你的问题,请参考以下文章