在Swift 3.0中向UIButton添加动作时发生的问题
问题描述:
我正在以编程方式在swift 3
中创建UIButton
。在Swift 3.0中向UIButton添加动作时发生的问题
但我无法添加动作。
//Adding BUtton
let btn = UIButton()
btn.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
btn.addTarget(self, action: #selector(self.printname()), for: UIControlEvents.touchUpInside)
self.view.addSubview(btn)
//Method to be called
func printname()
{
print("button pressed")
}
我在做什么错在上面的代码?
编辑
现在,我使用这个代码:
btn.addTarget(self, action: #selector(self.printname(sender:)), for:.touchUpInside)
func printname(sender: UIButton)
{
print("button pressed")
}
When I select Button this method is never called.
答
//Adding BUtton
let btn = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100))
btn.backgroundColor = UIColor.clearColor()
btn.setTitle("Test Button", forState: .Normal)
btn.addTarget(self, action: #selector(printname), forControlEvents: .TouchUpInside)
self.view.addSubview(btn)
//button action
func printname(){
print("button pressed")
}
答
你并不需要添加()
当你路过该方法的一个方法结束选择!这是因为()
用于指定参数,当您调用时,该方法为。但你不想打电话给你,你呢?所以删除()
!
//Adding BUtton
let btn = UIButton()
btn.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
//() removed!
btn.addTarget(self, action: #selector(self.printname), for: UIControlEvents.touchUpInside)
self.view.addSubview(btn)
//Method to be called
func printname()
{
print("button pressed")
}
这是一样的封闭传递给一个方法:
doStuff(withClosure: myMethod)
func myMethod() {
// ...
}
这也是如此,不管有多少争论也有在传递的方法
编辑:我只是看到你的printname
方法似乎是在另一种方法。如果这是真的,请将其移至课堂级别!此外,您还需要添加一个sender
参数printname
:
func printname(sender: UIButton) {
// ...
}
试试这个btn.addTarget(自我,动作:#selector(Viewcontrollername.printname),用于:UIControlEvents.touchUpInside) –
@马特现在收到此错误: '#selecotr'的参数不能引用全局函数'printname()'' – Dalvik