作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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"
因此我想要一个名为 func blackberry(sender: UIButton)
的 buttonAction
函数,这个函数将保存字符串 "blackberry"
在 String
数组中。
但是所有这些都应该在初始 buttonName: String
参数的函数中完成。
或者我真的做事不对,那我该怎么办?
最佳答案
这个怎么样。将所有按钮发送到 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
}
关于ios - 如何在 Swift 中动态创建 buttonAction 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947899/
我是一名优秀的程序员,十分优秀!