在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. 
+0

试试这个btn.addTarget(自我,动作:#selector(Viewcontrollername.printname),用于:UIControlEvents.touchUpInside) –

+0

@马特现在收到此错误: '#selecotr'的参数不能引用全局函数'printname()'' – Dalvik

//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) { 
    // ... 
}