我在一个应用程序中有一个 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/