swift uitapgesturerecognizer 传递参数

swift uitapgesturerecognizer pass parameters

我有很多以编程方式创建的按钮,它们可以随时更改。我的点击手势:

let apriVideoGesture = UITapGestureRecognizer(target: self, action: #selector(PrincipaleController.apriVideo(_:)))
cont.addGestureRecognizer(apriVideoGesture)

func apriVideo(sender : UITapGestureRecognizer){

}

如何传递参数?像这样的东西 :

let apriVideoGesture = UITapGestureRecognizer(target: self, action: #selector(PrincipaleController.apriVideo(stringa : "ciao")))
cont.addGestureRecognizer(apriVideoGesture)

func apriVideo(sender : UITapGestureRecognizer, stringa : String){

}

抱歉英语不好,我是意大利人

首先,如果您使用的是按钮,那么为什么要添加点击手势?您可以将目标添加到它作为

btn.addTarget(self, action: #selector(self.btnPressed(_:)), forControlEvents: .TouchDragInside)

但是您仍然可以使用点击手势来实现您的目标,如

按照你的坚持使用 UIView

    class ViewController: UIViewController {

    let arrayOfSongsURL: [String] = []
    let startingTag = 100

    override func viewDidLoad() {
        super.viewDidLoad()
        let height : CGFloat = 100
        let width : CGFloat = 100
        (arrayOfSongsURL as NSArray).enumerateObjectsUsingBlock { (url, index, finished) -> Void in
            
            let v = UIView(frame: CGRectMake(0, CGFloat(index) * height, width, height))
            v.tag = self.startingTag + index
            
            v.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleTapGesture(_:))))
            self.view.addSubview(v)
        }
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    
    @objc func handleTapGesture(gesture : UITapGestureRecognizer)
    {
        let v = gesture.view!
        let tag = v.tag
        let songURL = arrayOfSongsURL[tag - startingTag]
        
        //Do what you want to do with songURL
    }
}