添加功能以编程方式创建UIButtons

时间:2017-02-14 14:49:57

标签: ios swift uibutton

我正在尝试为动态创建的按钮添加功能。我之前创建了具有功能的按钮,但从未以编程方式创建。这是我的代码。

let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if error != nil
        {
            print("error")
        }
        else
        {
            if let content = data
            {
                do
                {
                    //download JSON data from php page, display data
                    let SongArray = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String]]
                    print(SongArray)

                    //Make buttons with JSON array
                    var buttonY:  CGFloat = 20
                    for song in SongArray {
                        let songButton = UIButton(frame: CGRect(x: 50, y: buttonY, width: 250, height: 30))
                        buttonY = buttonY + 50 // 50px spacing

                        songButton.layer.cornerRadius = 10  //Edge formatting for buttons

                        songButton.backgroundColor = UIColor.darkGray //Color for buttons

                        songButton.setTitle("\(song[0])", for: UIControlState.normal) //button title

                        songButton.titleLabel?.text = "\(song[0])"

                        songButton.addTarget(self,action: #selector(self.songButtonPressed(_:)), for: .touchUpInside)
                        DispatchQueue.main.async {
                            self.view.addSubview(songButton)  // adds buttons to view
                        }
                    }
                }
                catch
                {

                }
            }
        }
    }
    task.resume()

}

 } //close viewDidLoad
 func songButtonPressed(_ sender:UIButton) { // function for buttons

if sender.titleLabel?.text == "\("Song[0]")" {
    print("So far so good!!")
}
 }

我理想的做法是使用SongButtonPressed函数在按下任何按钮时运行,到目前为止,当我点击按钮时应用程序只会崩溃,尽管它们看起来很好。如何使用函数动态地为这些按钮添加功能

2 个答案:

答案 0 :(得分:0)

尝试替换以下行: 函数名称必须出现在选择器属性

SongButton.addTarget(self,action:#selector(self.SongButtonPressed(_ :)),for:UIControlEvents.touchUpInside)

最重要的功能SongButtonPressed必须在viewDidLoad之外

答案 1 :(得分:0)

看起来您使用的是UIKit框架,因此您可以使用.isHidden方法或.isEnabled

隐藏按钮的隐藏方法和启用的方法将显示按钮,但用户将无法按下按钮。

要使用该方法,请编写以下代码。

Button.isHidden = true

或者

Button.is enabled = false

但是如果你使用这些方法,你需要有一个相反的按钮(如果是假则将其设置为true,如果为真,则设置为false),以便可以再次使用该按钮。