如何动态添加动作到UIButton

时间:2015-05-31 06:32:44

标签: ios swift uibutton

我注意到我有很多功能可以在我的一个视图控制器中动态添加按钮,这显然违背了DRY原则。

为了解决这个问题,我写了一个命中一切configureButton函数:

func configureButton (button: UIButton, action: String, title: String, pos: [CGFloat]) {
    button.addTarget(self, action: action,
            forControlEvents: UIControlEvents.TouchUpInside)
    // ^ throws an error

    // button.addTarget(self, action: "goToScanner",
    //        forControlEvents: UIControlEvents.TouchUpInside)

    /* configure everything else */        

    self.view.addSubview(button)
}

当我有许多不同的功能时,我只是写了类似

的东西
button.addTarget(self, action: "goToScanner",    // <-- note the string
        forControlEvents: UIControlEvents.TouchUpInside)

在每个中,其中"goToScanner"是我想要点击的功能。

我希望能够将button.addTarget的操作参数动态传递给configureButton

configureButton(scanButton, action: "goToScanner", title: "Scan", pos: [36.0, 300])

我尝试传递一个句子() -> (),但这没有用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你的方法应该是

func configureButton (button: UIButton, action: Selector, title: String, pos: [CGFloat])

请注意它如何使用Selector代替String

这是因为Swift没有Selector的内置实现,你传递一个字符串,字符串文字被推断为Selector (就像输入一样)数字文字将作为int,float,NSNumber等工作。