gpt4 book ai didi

ios - 用 Throttle 替换所有 UIButton 触摸事件

转载 作者:行者123 更新时间:2023-11-30 11:03:06 48 4
gpt4 key购买 nike

我想全局阻止用户双击按钮。作为概念证明,我开始重写 UI 按钮的 addTarget 方法,并使用 RxSwift 将原始调用替换为节流调用:

import Foundation
import RxSwift
import RxCocoa

public extension UIButton {

override open func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents) {

guard controlEvents == UIControlEvents.touchUpInside,
let viewController = target as? UIViewController
else
{
super.addTarget(target, action: action, for: controlEvents)
return
}

self.rx
.tap
.throttle(3,
latest: false,
scheduler: MainScheduler.instance)
.subscribe({ _ in
viewController.perform(action)
})
}
}

调用此代码时,我收到错误访问错误:

Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

我对 Swift 还很陌生,因此如果您能提供有关从何处开始进行故障排除或替代建议的指导,我们将不胜感激。

最佳答案

来自苹果:

Extensions can add new functionality to a type, but they cannot override existing functionality.

更好的解决方案是创建一个新方法,而不是尝试覆盖当前方法,并进行全局查找和替换以指向新方法。

既然您将 RxSwift 引入您的项目,为什么不使用它呢?

extension Reactive where Base: UIButton {
public var safeTap: ControlEvent<Void> {
return ControlEvent.init(events: tap.throttle(3, latest: false, scheduler: MainScheduler.instance))
}
}

关于ios - 用 Throttle 替换所有 UIButton 触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053990/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com