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,008評論 3 119
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,857評論 0 6
  • Swift2.0 1.defer譯為延緩、推遲之意類似棧 注意作用域,其次是調用順序——即一個作用域結束(注意),...
    zeqinjie閱讀 3,407評論 0 50
  • 匹配語句如下: import re s1=r"javapythonh.tmlvhdpythonl" p1 =r"c...
    瀟湘demi閱讀 409評論 1 0
  • 法律人很少出現詩意的表達,這是專業需要也是思維習慣的作用。然而,辛苦一天半夜無眠時翻開一本詩集會讓我感覺被...
    如穎隨行是太陽女神閱讀 690評論 0 1