0

在 MCQ 应用程序中,我UIButton像这样以编程方式创建多个

func createNewButton(buttonName: String, xPosition: CGFloat, yPosition: CGFloat) -> UIButton {
    let myButton = UIButton(frame: CGRectMake(0, 0, 50, 50))
    myButton.center = CGPoint(x: xPosition, y: yPosition)
    myButton.setImage(UIImage(named: buttonName), forState: UIControlState.Normal)
    myButton.addTarget(self, action: "buttonName:", forControlEvents: UIControlEvents.TouchUpInside)
    return myButton
}    

问题是为了将功能与这些按钮匹配,我需要创建一个功能。因此,该功能应该看起来像

func buttonName(sender: UIButton!) {
    // do some stuff
}        

这些函数实际上是将一个字符串保存在一个数组中,而要保存的字符串就是函数本身的名称。例如buttonName: "blackberry",如果我们有,代码将设置一个名为的图像"blackberry"并添加一个名为的目标操作"blackberry",因此我希望buttonAction调用一个函数func blackberry(sender: UIButton),该函数会将字符串保存"blackberry"String.

但是所有这些都应该在初始buttonName: String参数的函数中完成。

或者也许我真的没有以正确的方式做事,那我该怎么做?

4

1 回答 1

3

这个怎么样。将所有按钮发送到processButton(button: UIButton). 创建按钮时,请设置tag为每个按钮分配唯一编号的属性。然后你可以有一个将按钮标签转换为字符串的数组。

var buttonNames: [String] = []
var currentIndex = 0

func createNewButton(buttonName: String, xPosition: CGFloat, yPosition: CGFloat) -> UIButton {
    let myButton = UIButton(frame: CGRectMake(0, 0, 50, 50))
    myButton.center = CGPoint(x: xPosition, y: yPosition)
    myButton.setImage(UIImage(named: buttonName), forState: UIControlState.Normal)
    myButton.addTarget(self, action: "processButton:", forControlEvents: UIControlEvents.TouchUpInside)
    myButton.tag = currentIndex++
    self.buttonNames.append(buttonName)
    return myButton
}

func processButton(button: UIButton) {
    let string = buttonNames[button.tag]
    // process string
}
于 2014-11-15T16:58:55.610 回答