Селектор в swift3
Почему это не работает в быстрой 3? Во время выполнения он выходит из строя, говоря:
'- [my_app_name.displayOtherAppsCtrl tap:]: нераспознанный селектор отправлен к примеру 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")
}
}
Ответы
Ответ 1
Selector("tap:")
теперь должно быть записано как #selector(tap(gestureReconizer:))
Кроме того, вы должны объявить tap как func tap(_ gestureRecognizer: UITapGestureRecognizer)
в соответствии с новым Руководством Swift API, и тогда ваш селектор станет #selector(tap(_:))
.
Ответ 2
В Swift 3 он работает следующим образом:
@IBOutlet var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap))
myView.addGestureRecognizer(tap)
}
func handleTap() {
print("tapped")
}
Ответ 3
Swift 3 появился с новым синтаксисом, поэтому вместо использования Selector ( "tap:" ), #selector (tap (gestureReconizer:))
Ответ 4
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--")
}