我正在尝试为动态创建的按钮添加功能。我之前创建了具有功能的按钮,但从未以编程方式创建。这是我的代码。
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函数在按下任何按钮时运行,到目前为止,当我点击按钮时应用程序只会崩溃,尽管它们看起来很好。如何使用函数动态地为这些按钮添加功能
答案 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),以便可以再次使用该按钮。