好的,这个问题可能有点难以理解......但提前谢谢。
假设我有一个包含3个条目的列表,["Example 1", "Example 2", "Example 3"]
我们还说我有另一个列表,其中还有3个条目。 ["Value 1", "Value 2", "Value 3"]
现在的目标是创建一个按钮,每个按钮的偏移量为+ 10x(不重叠),每个按钮都有自己的动作。
现在的问题在于这两个列表不是硬编码的,而是在应用程序运行时生成的。
我知道如何以编程方式创建按钮,我知道如何以编程方式添加动作,但仅限于我对其进行硬编码。
我需要一种迭代这些列表的方法,为每个条目创建一个按钮,并为每个条目创建一个动作。
我正在尝试这样的事情:
func create(id: String){ #Accepts an id as a parameter, this id will be used to name the action.
let button = UIButton()
button.frame = (frame: CGRect(x: self.view.frame.size.width - 60, y: 20, width: 50, height: 50)) #Currently does not change x coor
button.backgroundColor = UIColor.red
button.setTitle("Name your Button ", for: .normal)
button.addTarget(self, action: #selector(id), for: .touchUpInside)#Now this is where it fails, I cannot have id as the selector, as it does not exist, yet
self.view.addSubview(button)
func id(sender: UIButton!) { #Uses the id variable passed to the function to create a function.
print("Button tapped")
}
}
不幸的是,以上不起作用,否则我不会在这里。任何帮助表示赞赏。
TL; DR我有2个列表,我想迭代列表为每个条目创建一个按钮(我可以做那个部分),我希望每个按钮都有一个动作,但我不能硬编码这个列表是程序运行时生成。
答案 0 :(得分:3)
请勿尝试对所有按钮使用不同的操作。使用相同的(硬编码)动作方法,并在该方法的实现中,以其他方式区分按钮。显而易见的选择是使用按钮的tag
属性。创建它们时,请将有意义的值指定为tag
。在操作方法中,检查sender
' tag
并采取相应行动。