UIButton上需要单击和双击事件?

时间:2013-07-19 08:30:20

标签: ios uibutton uitouch uievent

有三种可用的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;
}

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

2 个答案:

答案 0 :(得分:4)

也许你应该使用UIView和2 UITapGestureRecognizers而不是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;

答案 1 :(得分:0)

您无需处理双击,也无法正确处理按钮。

尝试按钮操作,并为按钮的默认/选定状态设置正确的图像。

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

    [sender setSelected:![sender isSelected]];

    if ([sender isSelected]) {

        //Play

    } else {

        //Pause

    }

}