pass parameter create ios selector swift3

ios - parameter - swift create selector



Selector en swift3 (4)

En Swift 3 funciona así:

@IBOutlet var myView: UIView! override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap)) myView.addGestureRecognizer(tap) } func handleTap() { print("tapped") }

¿Por qué esto no funciona en Swift 3? Se bloquea en tiempo de ejecución diciendo:

''- [my_app_name.displayOtherAppsCtrl tap:]: selector no reconocido enviado a la instancia 0x17eceb70''

override func viewDidLoad() { super.viewDidLoad() // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Register cell classes //self.collectionView!.register(ImageCell.self, forCellWithReuseIdentifier: reuseIdentifier) // Do any additional setup after loading the view. let lpgr = UITapGestureRecognizer(target: self, action: Selector("tap:")) lpgr.delegate = self collectionView?.addGestureRecognizer(lpgr) } func tap(gestureReconizer: UITapGestureRecognizer) { if gestureReconizer.state != UIGestureRecognizerState.ended { return } let p = gestureReconizer.location(in: self.collectionView) let indexPath = self.collectionView?.indexPathForItem(at: p) if let index = indexPath { //var cell = self.collectionView?.cellForItem(at: index) // do stuff with your cell, for example print the indexPath print(index.row) } else { print("Could not find index path") } }


Swift 3 vino con una nueva sintaxis, por lo que en lugar de usar Selector ("tap:"), #selector (tap (GestorReconizer :)) es


Swift 3:

class MYPTempController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) view.addSubview(btn) btn.addTarget(self, action: #selector(MYPTempController.btnClick), for: .touchUpInside) } @objc fileprivate func btnClick() { print("--click--") } }

//带参数 btn.addTarget(self, action: #selector(MYPTempController.btnClick(_:)), for: .touchUpInside) //监听方法 func btnClick(_ sender: UIButton) { print("--click--") }


Selector("tap:") ahora debe escribirse como #selector(tap(gestureReconizer:))

Además, debe declarar tap como func tap(_ gestureRecognizer: UITapGestureRecognizer) según las nuevas Directrices de API Swift, en cuyo caso su selector se convertiría en #selector(tap(_:)) .