ios - 防止用户每秒按下按钮 x 次

标签 ios swift uibutton

我在一个应用程序中有一个 UIButton,它允许用户向 API 发送请求。

如何防止用户每秒按此按钮超过 X 次?

最佳答案

我假设您只想忽略按钮上过于频繁的点击,但您不需要将按钮设置为在忽略点击时显示为禁用状态。 (如果你想改变按钮的外观,你需要使用 NSTimer 或其他延迟 Action 来重新启用按钮,这是一个非常复杂的问题。)

如果将要求更改为“点击之间至少间隔 1/X 秒”,它会简单一些。例如,我们不再允许每秒最多点击 4 次,而是忽略前一次点击后不到 1/4 秒的点击。

要实现此要求,请存储最后一次点击的时间。当点击到达时,查看自上次点击后是否过去了 1/X 秒。如果没有,请忽略点击。

    private let minimumTapInterval = 1 / CFTimeInterval(4)
    private var lastTapTime = CFAbsoluteTime(0)

    @IBAction func buttonWasTapped(sender: AnyObject?) {
        let now = CFAbsoluteTimeGetCurrent()
        guard now >= lastTapTime + minimumTapInterval else { return }
        lastTapTime = now
        sendAPIRequest()
    }

如果你真的想实现“每秒不超过 X 次点击”的要求,你可以存储接受的点击次数。当有新的水龙头进来时,丢弃任何早于一秒的存储时间。如果还有至少 X 个存储时间,则忽略新的点击。

    private let maxTapsPerSecond = 4
    private var tapTimes = [CFAbsoluteTime]()

    @IBAction func buttonWasTapped(sender: AnyObject?) {
        let now = CFAbsoluteTimeGetCurrent()
        let oneSecondAgo = now - 1
        tapTimes = tapTimes.filter { $0 >= oneSecondAgo }
        // All elements of tapTimes are now within the last second.
        guard tapTimes.count < maxTapsPerSecond else { return }
        tapTimes.append(now)
        sendAPIRequest
    }

关于ios - 防止用户每秒按下按钮 x 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751782/

相关文章:

ios 如何添加一个 inputAccessoryView?

json - Swift - 读取 JSON 文件

swift - 无法将类型 'Int' 的值转换为预期的参数类型 'ClassName'

uiview - 如何使 UIbutton 在 UIView 中可拖动?

ios - 在动画其标题背景时单击 UIButton 显示错误行为

iOS 7 套接字连接被拒绝错误 61

ios - pod install mkdir 权限被拒绝

ios - 如何使用 Facebook iOS SDK 3.21.1 获得 "rerequest"电子邮件权限?

ios - Swift Package Manager添加了自动第三方库确认和许可

ios - 在 ScrollView 中添加按钮 --> 启动时不会加载 View