我正在尝试从UIView类的UIGestureRecognizer向其父类的View Controller发送操作。
HomeViewController包含一个包含多个(5) OperationViews的视图。
OperationView扩展了UIView,如下所示:
class OperationView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
// OperationView is on a view that has HomeViewController as it's controller in StoryBoard
let swipeGestureRecognizer = UISwipeGestureRecognizer(target: HomeViewController.self(), action: #selector(HomeViewController.operatorWasSwiped(_:)))
swipeGestureRecognizer.direction = .left
let tapGestureRecognizer = UITapGestureRecognizer(target: HomeViewController.self(), action: #selector(HomeViewController.operatorWasSwiped(_:)))
self.addGestureRecognizer(swipeGestureRecognizer)
self.addGestureRecognizer(tapGestureRecognizer)
}
在HomeViewController中,我有一个应该由UIGestureRecognizers调用的函数:
@objc func operatorWasSwiped(_ sender : UIGestureRecognizer) {
if (sender.isKind(of: UITapGestureRecognizer.self)) { print("Tapped") }
else { print("Swiped") }
self.performSegue(withIdentifier: "segue1", sender: nil)
}
但是,我没有得到任何东西。一点错误都没有。
我尝试使用HomeViewController上的IBOutlet将UIGestureRecognizer添加到每个OperationView中,如下所示:
view1.swipeGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view2.swipeGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view3.swipeGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view4.swipeGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view5.swipeGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view1.tapGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view2.tapGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view3.tapGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view4.tapGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view5.tapGestureRecognizer?.addTarget(self, action: #selector(operatorWasSwiped(_ :)))
view1.addGestureRecognizer(view1.swipeGestureRecognizer!)
view2.addGestureRecognizer(view2.swipeGestureRecognizer!)
view3.addGestureRecognizer(view3.swipeGestureRecognizer!)
view4.addGestureRecognizer(view4.swipeGestureRecognizer!)
view.addGestureRecognizer(view5.swipeGestureRecognizer!)
view1.addGestureRecognizer(view1.tapGestureRecognizer!)
view2.addGestureRecognizer(view2.tapGestureRecognizer!)
view3.addGestureRecognizer(view3.tapGestureRecognizer!)
view4.addGestureRecognizer(view4.tapGestureRecognizer!)
view5.addGestureRecognizer(view5.tapGestureRecognizer!)
我在其中添加了:
var swipeGestureRecognizer: UISwipeGestureRecognizer?
var tapGestureRecognizer: UITapGestureRecognizer?
为OperationView的变量创建类
这是可行的,但还远远谈不上优雅(想象一下,如果我不得不添加另一个view...kinda,这会使我之前的抽象失去意义)
知道是怎么回事吗?或者我错过了什么?
我使用的是Swift 4和Xcode 9
https://stackoverflow.com/questions/50777148
复制相似问题