Skip to content

Instantly share code, notes, and snippets.

@valvoline
Last active October 27, 2015 21:12
Show Gist options
  • Save valvoline/5b03e80740c26f8eb0be to your computer and use it in GitHub Desktop.
Save valvoline/5b03e80740c26f8eb0be to your computer and use it in GitHub Desktop.
//
// UIButtonClosureAdditions.swift
// pickerTest
//
// Created by valvoline on 27/10/15.
// Copyright © 2015 ISALabs. All rights reserved.
//
import UIKit
import ObjectiveC
class ClosureWrapper: NSObject, NSCopying {
var closure: (() -> Void)?
convenience init(closure: (() -> Void)?) {
self.init()
self.closure = closure
}
func copyWithZone(zone: NSZone) -> AnyObject {
let wrapper: ClosureWrapper = ClosureWrapper()
wrapper.closure = closure
return wrapper
}
}
extension UIButton {
private struct AssociatedKeys {
static var SNGLSActionHandlerTapKey = "sngls_ActionHandlerTapKey"
}
func handleControlEvent(event: UIControlEvents, handler:(() -> Void)?) {
let aBlockClassWrapper = ClosureWrapper(closure: handler)
objc_setAssociatedObject(self, &AssociatedKeys.SNGLSActionHandlerTapKey, aBlockClassWrapper, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.addTarget(self, action: "callActionBlock:", forControlEvents: event)
}
func callActionBlock(sender: AnyObject) {
let actionBlockAnyObject = objc_getAssociatedObject(self, &AssociatedKeys.SNGLSActionHandlerTapKey) as? ClosureWrapper
actionBlockAnyObject?.closure?()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment