关于swift的target-action

//
//  TargetActionUtils.swift
//  ArtCircle
//
//  Created by wupeng on 16/1/20.
//
//        http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/?utm_campaign=iOS_Dev_Weekly_Issue_157&utm_medium=email&utm_source=iOS%2BDev%2BWeekly
import UIKit
protocol TargetAction {
    func performAction()
}
struct TargetActionWrapper<T: AnyObject> : TargetAction {
    weak var target: T?
    let action: (T) -> () -> ()
    
    func performAction() -> () {
        if let t = target {
            action(t)()
        }
    }
}
enum ControlEvent {
    case TouchUpInside
    case ValueChanged
    // ...
}
class WPButton : UIButton {
    var actions = [ControlEvent: TargetAction]()
    
    func wp_setTarget<T: AnyObject>(target: T, action: (T) -> () -> (), controlEvent: ControlEvent) {
        actions[controlEvent] = TargetActionWrapper(target: target, action: action)
    }
    
    func removeTargetForControlEvent(controlEvent: ControlEvent) {
        actions[controlEvent] = nil
    }
    
    func performActionForControlEvent(controlEvent: ControlEvent) {
        actions[controlEvent]?.performAction()
    }
    var actionColsure:(() -> Void)?
    /**
     先使用closure方法避免使用字符串的Selector
     
     - parameter controlEvents: 事件
     - parameter actionHandler: 回调函数
     */
    func addAction(forControlEvents controlEvents:UIControlEvents = .TouchUpInside, actionHandler:(() -> Void)) {
        self.actionColsure = actionHandler
        self.addTarget(self, action: Selector("buttonTaped:"), forControlEvents:controlEvents )
    }
    func buttonTaped(btn:WPButton) {
        if self.actionColsure != nil {
            self.actionColsure!()
        }
    }
    deinit {
        
    }
}

转载于:https://my.oschina.net/wupengnash/blog/656424

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值