是否可以将块设置为UIButton上的目标?

时间:2011-12-03 01:47:07

标签: iphone objective-c

我需要在按下按钮时向方法发送额外的参数,但无法找到使addTarget发送选择器的方法。

我宁愿使用一个块,但有没有一种方法可以在运行时将块附加到UIButton?

3 个答案:

答案 0 :(得分:13)

是的,您可以使用BlocksKit库轻松完成:

#import <BlocksKit/UIControl+BlocksKit.h>

[someButton addEventHandler:^(id sender) {
    // some action here
} forControlEvents:(UIControlEventTouchUpInside)];

或使用RxSwift button.rx.tap observable。

答案 1 :(得分:3)

默认不是。但是,您可以将UIButton子类化以实现此目的。有人做了here

答案 2 :(得分:2)

也许以后参加派对,但你可以使用我几周前做过的简单扩展来实现你的目标。你可以得到它here

并按如下方式使用:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewDidAppear(animated: Bool) {
        let aButton = UIButton(type: .Custom)
        aButton.frame = CGRectMake(100, 100, 100, 80)
        aButton.backgroundColor = UIColor.greenColor()
        aButton.handleControlEvent(.TouchUpInside) { () -> Void in
            NSLog("ich")
        }
        self.view.addSubview(aButton)
    }
}