         action(parameter as! T, event)
     }
     
-    init(action: @escaping (T, UIEvent?) -> Void) {
+    init(event: UIControlEvents, action: @escaping (T, UIEvent?) -> Void) {
         self.action = action
+        controlEvent = event
     }
 }
 

     */
    @discardableResult
    public func add<T: UIControl>(event: UIControlEvents, action: @escaping (T, UIEvent?) -> Void) -> Action {
        let action = EventAction(action: action)
        add(event: event, action: action)
        return action
    }


import UIKit

private protocol ControlAction: Action {
    var controlEvent: UIControlEvents { get }
}

private class ControlVoidAction: VoidAction, ControlAction {
    fileprivate let controlEvent: UIControlEvents
    init(event: UIControlEvents, action: @escaping () -> Void) {
        controlEvent = event
        super.init(action: action)
    }
}

private class ControlParametizedAction<T: UIControl>: ParametizedAction<T>, ControlAction {
    fileprivate let controlEvent: UIControlEvents
    init(event: UIControlEvents, action: @escaping (T) -> Void) {
        controlEvent = event
        super.init(action: action)
    }
}

// Action to manage the two parameters selector allowed in controls
private class EventAction<T: UIControl>: ControlAction {
    
    fileprivate let controlEvent: UIControlEvents
    @objc let key = ProcessInfo.processInfo.globallyUniqueString
    @objc let selector: Selector = #selector(perform)
    
