Blame view
App/camera/ALCameraLib/Utilities/UIButtonExtensions.swift
1.35 KB
|
1341bf603
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
//
// UIButtonExtensions.swift
// ALCameraViewController
//
// Created by Alex Littlejohn on 2016/03/26.
// Copyright © 2016 zero. All rights reserved.
//
import UIKit
typealias ButtonAction = () -> Void
extension UIButton {
private struct AssociatedKeys {
static var ActionKey = "ActionKey"
}
private class ActionWrapper {
let action: ButtonAction
init(action: @escaping ButtonAction) {
self.action = action
}
}
var action: ButtonAction? {
set(newValue) {
removeTarget(self, action: #selector(performAction), for: .touchUpInside)
var wrapper: ActionWrapper? = nil
if let newValue = newValue {
wrapper = ActionWrapper(action: newValue)
addTarget(self, action: #selector(performAction), for: .touchUpInside)
}
objc_setAssociatedObject(self, &AssociatedKeys.ActionKey, wrapper, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
get {
guard let wrapper = objc_getAssociatedObject(self, &AssociatedKeys.ActionKey) as? ActionWrapper else {
return nil
}
return wrapper.action
}
}
func performAction() {
guard let action = action else {
return
}
action()
}
}
|