found an easy solution:
1 .create an UIControl extension
private let swizzling: (AnyClass, Selector, Selector) -> () = { forClass, originalSelector, swizzledSelector in
let originalMethod = class_getInstanceMethod(forClass, originalSelector)
let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector)
method_exchangeImplementations(originalMethod!, swizzledMethod!)
}
extension UIControl {
static let classInit: Void = {
let originalSelector = #selector(sendAction(_:to:for:))
let swizzledSelector = #selector(swizzled_sendAction(_:to:for:))
swizzling(UIControl.self, originalSelector, swizzledSelector)
}()
@objc func swizzled_sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
swizzled_sendAction(action, to: target, for: event)
print("action was triggered")
}
}
init in AppDelegate:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
override init() {
super.init()
UIControl.classInit
}
example from here: https://stackoverflow.com/a/42047289/2820043