2017-10-05 51 views
2

我有以下UITapGestureRecognizer设置,但该方法未被调用?Swift 4 - 将UITapGestureRecognizer添加到子视图图像 - 该方法未被调用

注意:UITapGestureRecognizer被添加到子视图项。

此外,它在本身中添加UIGestureRecognizerDelegate时起作用 - 唯一的问题是我在容器中需要它。

class StepViewContainer: NSObject, UIGestureRecognizerDelegate { 
var view: SUStepView? 

    @objc func tapAction(recognizer: UITapGestureRecognizer) { 

    } 

    override init(){ 
     super.init() 
     // View 
     self.view = Bundle.main.loadNibNamed("SignupV3Views", owner: self, options: nil)![0] as? SUStepView 

     let mytapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapAction)) 
     mytapGestureRecognizer.numberOfTapsRequired = 1 
     self.view?.imageView.addGestureRecognizer(mytapGestureRecognizer)    
    } 
} 

在StepViewContainer的观点:

class SUStepView: UIView { 
@IBOutlet weak var imageView: UIImageView! 

    @objc public func nextStepTap(sender: UITapGestureRecognizer) { 
    } 

    override func awakeFromNib() { 
     let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(nextStepTap)) 
     tapGestureRecognizer.numberOfTapsRequired = 1 
     self.imageView.addGestureRecognizer(tapGestureRecognizer) 

     self.imageView.isUserInteractionEnabled = true 
     self.imageView.layer.masksToBounds = true 
     self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2 
     self.imageView.clipsToBounds = true 

} 
+0

你为什么不直接使用''ImageView的,而不是'self.view?.imageView' –

+0

我有一个处理不同事件的容器(个体经营)。 –

+1

您是否在imageView上设置了userInteractionEnabled = true? – Eridana

回答

1

尝试。

let mytapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(myTapAction)) 
mytapGestureRecognizer.numberOfTapsRequired = 1 
self.imageView.addGestureRecognizer(mytapGestureRecognizer) 

方法。

func myTapAction(recognizer: UITapGestureRecognizer) { 
} 
2

夫特4代码:

TapGesture:

tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.myviewTapped(_:))) 
tapGesture.numberOfTapsRequired = 1 
tapGesture.numberOfTouchesRequired = 1 

ImageView的分流:

self.imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width/2.0, height: self.view.frame.size.height/2.0)) 
    self.imageView.isUserInteractionEnabled = true 
    self.imageView.backgroundColor = UIColor.red 
    self.imageView.layer.masksToBounds = true 
    self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2 
    self.imageView.clipsToBounds = true 
    self.imageView.addGestureRecognizer(tapGesture) 
    self.view.addSubview(self.imageView) 

呼吁点击

@objc func myviewTapped(_ sender: UITapGestureRecognizer) { 
    if self.imageView.backgroundColor == UIColor.yellow { 
     self.imageView.backgroundColor = UIColor.green 
    }else{ 
     self.imageView.backgroundColor = UIColor.yellow 
    } 
} 
+1

为什么我必须在函数前添加@ @ objc'? –