Swift给button和view添加block回调

UIButton-E.swift

extension UIButton {
private struct RuntimeKey {
static let actionBlock = UnsafeRawPointer.init(bitPattern: "actionBlock".hashValue)
}

var callBack: buttonClickBlock? {
    get {
        return objc_getAssociatedObject(self, UIButton.RuntimeKey.actionBlock!) as? buttonClickBlock
    }
    set {
        objc_setAssociatedObject(self, UIButton.RuntimeKey.actionBlock!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }
}
convenience init(type:UIButtonType) {
    self.init()
    self.addTarget(self, action: #selector(tapped(button:)), for: .touchUpInside)
}

@objc func tapped(button:UIButton){
    if self.callBack != nil {
        self.callBack!()
    }
}

}

UIView-E.swift

import UIKit

typealias viewClick = (() -> ())

extension UIView {
private struct RuntimeKey {
static let actionBlock = UnsafeRawPointer.init(bitPattern: "actionBlock".hashValue)
static let actionBlock2 = UnsafeRawPointer.init(bitPattern: "actionBlock2".hashValue)
}

var viewCallBack : viewClick? {
    get {
        return objc_getAssociatedObject(self, UIButton.RuntimeKey.actionBlock!) as? buttonClickBlock
    }
    set {
        objc_setAssociatedObject(self, UIButton.RuntimeKey.actionBlock!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        setUpViewClick()
    }
    
}

@objc func tapView() {
    if self.viewCallBack != nil {
        self.viewCallBack!()
    }
}

func setUpViewClick() {
    let gesture = UITapGestureRecognizer.init(target: self, action: #selector(tapView))
    
    self.addGestureRecognizer(gesture)
}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,854评论 0 6
  • Swift2.0 1.defer译为延缓、推迟之意类似栈 注意作用域,其次是调用顺序——即一个作用域结束(注意),...
    zeqinjie阅读 3,398评论 0 50
  • 匹配语句如下: import re s1=r"javapythonh.tmlvhdpythonl" p1 =r"c...
    潇湘demi阅读 409评论 1 0
  • 法律人很少出现诗意的表达,这是专业需要也是思维习惯的作用。然而,辛苦一天半夜无眠时翻开一本诗集会让我感觉被...
    如颖随行是太阳女神阅读 687评论 0 1