以编程方式动态创建按钮和操作

时间:2017-01-15 03:16:02

标签: swift xcode

好的,这个问题可能有点难以理解......但提前谢谢。

假设我有一个包含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个列表,我想迭代列表为每个条目创建一个按钮(我可以做那个部分),我希望每个按钮都有一个动作,但我不能硬编码这个列表是程序运行时生成。

1 个答案:

答案 0 :(得分:3)

请勿尝试对所有按钮使用不同的操作。使用相同的(硬编码)动作方法,并在该方法的实现中,以其他方式区分按钮。显而易见的选择是使用按钮的tag属性。创建它们时,请将有意义的值指定为tag。在操作方法中,检查sender' tag并采取相应行动。