【问题标题】:UILongPressGestureRecognizer Turns Off UIButton HighlightingUILongPressGestureRecognizer 关闭 UIButton 高亮
【发布时间】:2011-02-15 20:28:24
【问题描述】:

我有一个 UILongPressGestureRecognizer 添加到 UIButton。当我按下 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 秒后被调用。该按钮在调用选择器之前突出显示,但在调用选择器时未突出显示,即使我仍在按下按钮。

谁能解释为什么会发生这种情况,以及如何预防?我希望按钮在按下时始终保持突出显示。谢谢。

【问题讨论】:

    标签: iphone ios ios4


    【解决方案1】:

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

    可以使用 cancelsTouchesInView 属性更改此行为

    longpressGesture.cancelsTouchesInView = NO;
    

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

    【讨论】:

    • 但它会调用 touchUpInside 的选择器。怎么预防??
    • @user1010819 你找到解决这个问题的方法了吗?我面临同样的问题..
    【解决方案2】:

    这有点推测..:我怀疑 GestureRecognizer 的触发正在响应者链中占据按钮位置,这使其失去焦点。我想不出任何办法来防止这种情况,但可能有一些解决方法:

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

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多