0

共有三个 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;
}

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

4

2 回答 2

4

也许你应该使用 UIView 而不是 UIButton 和 2 UITapGestureRecognizers?其中一个会有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;
于 2013-07-19T09:08:15.073 回答
0

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

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

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

    [sender setSelected:![sender isSelected]];

    if ([sender isSelected]) {

        //Play

    } else {

        //Pause

    }

}
于 2013-07-19T12:17:40.333 回答