2017-02-14 36 views
1

我想添加功能动态创建按钮。我已经创建了功能按钮,但从未编程过。这是我的代码。添加功能,以编程方式创建的UIButtons

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当任一按钮被按下运行,到目前为止,当我点击一个按钮,虽然他们出现就好了应用程序只是崩溃。如何使用函数替换下面一行将功能添加到这些按钮动态

+1

碰到什么错误? – Carcigenicate

+1

如果您希望'SongButtonPressed'运行,请将其用作选择器。 –

+0

'libC++ abi.dylib:终止于类型为NSException的未捕获异常' – xteetsx

回答

0

尝试: 函数名必须出现在选择属性

SongButton.addTarget(自我,动作:#selector(个体经营。 SongButtonPressed(_ :)),用于:UIControlEvents.touchUpInside)

而且最重要的功能SongButtonPressed必须viewDidLoad中

+0

在该行上抛出一个错误,表示'不能转换类型的值'(UIbutton) - >( )'到期望的参数类型'String' – xteetsx

+0

尝试更新的代码行@xteetsx –

0

看起来你正在使用的UIKit框架,这样你就可以使用.isHidden方法或.isEnabled

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

要使用该方法写下面的代码。

Button.isHidden = true 

或者

Button.is enabled = false 

但是如果你使用这些方法,你需要有一个按钮,会得到相反效果(将其设置为true,如果是假的还是假的,如果它是真实的),这样该按钮可以再次使用。

相关问题