我已经以编程方式创建了一个UIButton,如下所示:
let buttons: [UIButton] = [UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))];
现在,如果我尝试以编程方式向它添加一个函数,如下所示:
[buttons[0] addTarget:self action:@selector(buttonClicked:)forControlEvents:UIControlEventTouchUpInside]
我得到一个错误,说没有定义addTarget。我该如何解决?
你试图在swift中使用Objective-C语法,这是完全错误的,使用你的代码就像
buttons.first?.addTarget(self, action: #selector(self.buttonClicked(_:)), for: .touchUpInside)
和处理动作一样
@objc func buttonClicked( _ sender: UIButton) {
print("buttonClicked Action Found")
}
代码更改:
{ ...
buttons[0].addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)
... }
@objc func buttonClicked(_ button: UIButton) {
button.setTitle("Clicked", for: .normal)
}
首先,你正在创造[UIButton]
,这是Array
的UIButton
,它不是一个单一的按钮。
你不能以这种方式创建Array
的UIButton
。你需要一个for
循环,你需要相应地更新frame
。
你可以用这种方式创建一个UIButton
:
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
然后你可以这样将它添加到UIView
:
self.view.addSubview(button)
没有上面的线,你的按钮将不会显示在你的屏幕上。
接下来,如果要向该按钮添加操作,可以通过在按钮代码中添加以下行来执行此操作:
button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
它将需要一个辅助方法,当按钮单击时将执行该方法。
@objc func buttonClicked(_ sender: UIButton) {
//Perform your action when button is clicked.
}
而且你还需要将backgroundColor
和setTitle
应用于按钮。
你的最终代码如下:
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = UIColor.green
button.setTitle("Test Button", for: .normal)
button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)
self.view.addSubview(button)