【问题标题】:Required single tap and double tap event on UIButton?UIButton上需要单击和双击事件吗?
【发布时间】:2013-07-19 08:30:20
【问题描述】:

共有三个 UIButton 事件可用:

  • UITouchUPInside
  • UITouchDown
  • UITouchDownRepeat

我的问题是:

我有一个按钮(播放-暂停)。第一次显示播放按钮时,如果用户点击它,它会启动我的进程。并且按钮图像更改为暂停,标签更改为 1。

如果用户点击暂停按钮,它会暂停进程,图像更改为播放并标记为 0。

现在我的问题是,如果用户多次点击,它无法正常执行。就像双击桌面鼠标一样。

我已经尝试了上述所有三种方法,但在所有这些时间里,前两种方法都被调用了。那么如何避免呢。

如果它双击,那么进程也应该只启动一次。

请提出建议。

编辑: 目前我们只使用TouchUpInside 事件,我们正在检查

if (btn.tag == 0) {

// change to pause button
// start process

btn.tag = 1;
}
else if (btn.tag == 1) {

// change to play button
// stop process

btn.tag = 0;
}

但是当用户快速点击按钮时,这会导致问题。因为我的进程是在线程上运行的,所以加载和停止需要时间。同时使用已经双击了按钮。

【问题讨论】:

  • 通常用户只对按钮进行单击,如果在某些情况下支持双击,则它们的行为与单击不同。你想要的是对这两个动作做同样的动作。我认为你不应该让它变得复杂。
  • 检查我已将我的问题简单地添加为编辑;
  • 如果您不遵循界面指南,我认为 Apple 不会喜欢它。要求双击按钮会使用户感到困惑。

标签: ios uibutton uitouch uievent


【解决方案1】:

也许您应该使用带有 2 UITapGestureRecognizers 的 UIView 而不是 UIButton?其中一个将具有numberOfTapsRequired = 2,另一个将具有numberOfTapsRequired = 1。使用方法 requiresGestureRecognizerToFail 确保您不会让它们都调用它们的目标方法。然后,您可以将任何您想要的逻辑添加到点击处理中。

编辑:实际上,虽然上述答案是一种解决方法,但如果用户点击 3 次或更多次,它将失败。而且由于您不能真正为从 1 到无穷大的每一个点击次数制作手势识别器,因此在某些情况下它会失败。试试这个:

btn.enabled = NO;
if (btn.tag == 0) {

// change to pause button
// start process

btn.tag = 1;
}
else if (btn.tag == 1) {

// change to play button
// stop process

btn.tag = 0;
}
btn.enabled = YES;

【讨论】:

  • 嗨,我已经尝试过了,在我的自定义单元格类中将手势识别器添加到 uibutton。但是这些方法中的任何一个都没有被调用。
  • 如果您使用的是 UIGestureRecognizers,您实际上并不需要 UIButton - 简单的 UIView 就足够了。
  • 我编辑了我的答案,这可能是解决您问题的更好方法。
【解决方案2】:

你不需要处理双击,你没有正确处理按钮。

为您的按钮操作尝试此操作,并为按钮的默认/选定状态设置适当的图像。

- (void)handleButtonAction:(UIButton *)sender {

    [sender setSelected:![sender isSelected]];

    if ([sender isSelected]) {

        //Play

    } else {

        //Pause

    }

}

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2011-06-05
    • 2016-11-15
    相关资源
    最近更新 更多