Pourquoi cela ne fonctionne-t-il pas dans Swift 3? Il se bloque au moment de l'exécution en disant:
'- [mon_app_nom.displayOtherAppsCtrl tap:]: sélecteur non reconnu envoyé par exemple 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")
}
}
Selector("tap:")
devrait maintenant être écrit comme #selector(tap(gestureReconizer:))
En outre, vous devez déclarer tap comme étant func tap(_ gestureRecognizer: UITapGestureRecognizer)
conformément aux nouvelles Swift API Guidelines , auquel cas votre sélecteur deviendrait alors #selector(tap(_:))
.
Dans Swift 3, cela fonctionne comme ceci:
@IBOutlet var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap))
myView.addGestureRecognizer(tap)
}
func handleTap() {
print("tapped")
}
Swift 3 est venu avec une nouvelle syntaxe donc au lieu d'utiliser Selector ("tap:"), #selector (tap (gestureReconizer :)) est
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--")
}