     
 }
 
-
-public extension UIButton {
+public extension UIControl {
     
-    public func setAction(action: ((sender: AnyObject) -> Void)?) {
+    public func setAction(controlEvents controlEvents: UIControlEvents, action: ((sender: AnyObject) -> Void)?) {
         if let action = action {
-            self.removeTarget(self, action: nil, forControlEvents: .TouchUpInside)
-            self.addTarget(self, action: #selector(UIButton.performAction), forControlEvents: .TouchUpInside)
+            self.removeTarget(self, action: nil, forControlEvents: controlEvents)
+            self.addTarget(self, action: #selector(UIButton.performAction), forControlEvents: controlEvents)
             self.closuresWrapper = ClosureWrapper(action: action)
         } else {
-            self.removeTarget(self, action: nil, forControlEvents: .TouchUpInside)
+            self.removeTarget(self, action: nil, forControlEvents: controlEvents)
             self.closuresWrapper = nil
         }
     }

    private var closuresWrapper: ClosureWrapper? {
        get { return objc_getAssociatedObject(self, &_aaak) as? ClosureWrapper }
        set { objc_setAssociatedObject(self, &_aaak, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
    }
    
}

    
}

private final class ClosureWrapper {
    private var action: (sender: AnyObject) -> Void
    init(action: (sender: AnyObject) -> Void) {
