UILongPressGestureRecognizer关闭UIButton突出显示

时间:2011-02-15 20:28:24

标签: iphone ios ios4

我在UIButton中添加了UILongPressGestureRecognizer。当我按下UIButton时,它会按预期突出显示。但是,当调用UILongPressGestureRecognizer选择器时,突出显示将被关闭。

    UILongPressGestureRecognizer *longpressGesture = 
     [[UILongPressGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(longPressHandler:)];
    longpressGesture.minimumPressDuration = 5;
    [longpressGesture setDelegate:self];
    [self.myUIButton addGestureRecognizer:longpressGesture];
    [longpressGesture release];

    - (void)longPressHandler:(UILongPressGestureRecognizer *)gestureRecognizer {
    NSLog(@"longPressHandler");
}

在上面的示例中,按住按钮5秒后调用选择器。在调用选择器之前,该按钮会突出显示,但在调用选择器时会突然显示该按钮,即使我仍然按下该按钮。

任何人都可以解释为什么会发生这种情况,以及如何预防?我希望按下按钮在整个按下时保持高亮显示。感谢。

2 个答案:

答案 0 :(得分:37)

经过进一步研究,我发现这是由于手势识别器的默认行为,一旦识别出手势就会取消层次结构中的触摸。因此,一旦手势识别器识别出一个手势,它就会取消对UI按钮的触摸,然后不再突出显示,因为它不再有触摸事件。

可以使用 cancelsTouchesInView 属性

更改此行为
longpressGesture.cancelsTouchesInView = NO;

将此设置为NO会将触摸传递给响应者链。

答案 1 :(得分:0)

这有些推测......:我怀疑GestureRecognizer的触发是将按钮放在响应器链中,这使得它失去焦点。我想不出任何阻止​​这种情况的方法,但可能会有一些解决方法:

    长按处理程序方法中的
  • 操纵按钮继续显示按下状态。这可能是一种非常肮脏的方式。
  • 不要使用手势识别器。相反,当按下按钮时立即创建一个计时器,在5秒后调用一些选择器。如果在时间结束之前释放按钮,则只需使计时器无效。这应该是一个更“干净”的解决方案,但是,如果您决定使用手势识别器,这将无济于事。