Ilker Baltaci Ilker Baltaci - 6 months ago 172
iOS Question

Adding a closure as target to a UIButton

I have a generic control class which needs to set the completion of the button depending on the view controller.Due to that setLeftButtonActionWithClosure function needs to take as parameter a closure which should be set as action to an unbutton.How would it be possible in Swift since we need to pass the function name as String to action: parameter.

func setLeftButtonActionWithClosure(completion: () -> Void)
self.leftButton.addTarget(<#target: AnyObject?#>, action: <#Selector#>, forControlEvents: <#UIControlEvents#>)


If you want to adding a closure as target to a UIButton you add function to UIButton class by using extension

import UIKit

extension UIButton {

    private func actionHandleBlock(action:(() -> Void)? = nil) {
        struct __ {
            static var action :(() -> Void)?
        if action != nil {
            __.action = action
        } else {

    @objc private func triggerActionHandleBlock() {

    func actionHandle(controlEvents control :UIControlEvents, ForAction action:() -> Void) {
        self.addTarget(self, action: "triggerActionHandleBlock", forControlEvents: control)

and the call :

 let button = UIButton()
 button.actionHandle(controlEvents: UIControlEvents.TouchUpInside, 
 ForAction:{() -> Void in