【问题标题】:iOS - ignoring a tap gestureiOS - 忽略点击手势
【发布时间】:2011-08-24 08:20:25
【问题描述】:

我在自定义表格单元格中有一个 UITapGestureRecognizer,它什么都不做(删除点击单元格以选择它的能力)。这很好用,但是单元格中有一些按钮(子视图)无法点击,因为点击手势会处理整个单元格区域。

所以它就像检测触摸手势何时超过其中一个按钮并返回 false 以取消该特定手势一样简单,对吧?好吧,不适合我...

我已删除逻辑并在手势识别器中简单地返回 NO,但我仍然无法点击按钮。

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

这里有什么我遗漏的吗?

【问题讨论】:

    标签: ios uigesturerecognizer


    【解决方案1】:

    解决方案更简单:您不应该使用手势识别器来执行此操作。如果您不希望某个单元格处于可选状态,您可以做两件事:

    这样做应该可以保留您的按钮功能。


    编辑:如果你不想这样做,那么你可以做你最初尝试的事情——除了我认为你的方法名称错误,应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多