How to call gesture tap on UIView programmatically in swift

后端 未结 23 1673
情歌与酒
情歌与酒 2020-11-28 18:50

I have a UIView and and I have added tap gesture to it:

let tap = UITapGestureRecognizer(target: self, action: Selector(\"handleTap:\"))
tap.delegate = self         


        
相关标签:
23条回答
  • 2020-11-28 19:26

    Try the following swift code (tested in Xcode 6.3.1):

        import UIKit
    
        class KEUITapGesture150427 : UIViewController {
          var _myTap: UITapGestureRecognizer?
          var _myView: UIView?
    
          override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor = UIColor.whiteColor();
    
            _myTap = UITapGestureRecognizer(target: self
    , action: Selector("_myHandleTap:"))
            _myTap!.numberOfTapsRequired = 1
    
            _myView = UIView(frame: CGRectMake(100, 200, 100, 100))
            _myView!.backgroundColor=UIColor.blueColor()
            _myView!.layer.cornerRadius = 20
            _myView!.layer.borderWidth = 1
            _myView!.addGestureRecognizer(_myTap!)
            view.addSubview(_myView!)
          }
    
          func _myHandleTap(sender: UITapGestureRecognizer) {
            if sender.state == .Ended {
              println("_myHandleTap(sender.state == .Ended)")
              sender.view!.backgroundColor
              = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0);
            }
          }
        }
    

    Note that your target could be any subclass of UIResponder, see (tested in Xcode 6.3.1):

        import UIKit
    
        class MyTapTarget  : UIResponder {
          func _myHandleTap2(sender: UITapGestureRecognizer) {
            if sender.state == .Ended {
              println("_myHandleTap2(sender.state == .Ended)")
              sender.view!.backgroundColor
                = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0);
            }
          }
        }
    
        class KEUITapGesture150427b : UIViewController {
          var _myTap: UITapGestureRecognizer?
          var _myView: UIView?
          var _myTapTarget: MyTapTarget?
    
          override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor = UIColor.whiteColor();
    
            _myTapTarget = MyTapTarget()
            _myTap = UITapGestureRecognizer(target: _myTapTarget!
    , action: Selector("_myHandleTap2:"))
            _myTap!.numberOfTapsRequired = 1
    
            _myView = UIView(frame: CGRectMake(100, 200, 100, 100))
            _myView!.backgroundColor=UIColor.blueColor()
            _myView!.layer.cornerRadius = 20
            _myView!.layer.borderWidth = 1
            _myView!.addGestureRecognizer(_myTap!)
            view.addSubview(_myView!)
          }
        }
    
    0 讨论(0)
  • 2020-11-28 19:27

    Just a note - Don't forget to enabled interaction on the view:

    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
    
    view.addGestureRecognizer(tap)
    
    // view.userInteractionEnabled = true
    
    self.view.addSubview(view)
    
    0 讨论(0)
  • 2020-11-28 19:28

    STEP : 1

    @IBOutlet var viewTap: UIView!
    

    STEP : 2

    var tapGesture = UITapGestureRecognizer()
    

    STEP : 3

    override func viewDidLoad() {
        super.viewDidLoad()
        // TAP Gesture
        tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.myviewTapped(_:)))
        tapGesture.numberOfTapsRequired = 1
        tapGesture.numberOfTouchesRequired = 1
        viewTap.addGestureRecognizer(tapGesture)
        viewTap.isUserInteractionEnabled = true
    }
    

    STEP : 4

    func myviewTapped(_ sender: UITapGestureRecognizer) {
    
        if self.viewTap.backgroundColor == UIColor.yellow {
            self.viewTap.backgroundColor = UIColor.green
        }else{
            self.viewTap.backgroundColor = UIColor.yellow
        }
    }
    

    OUTPUT

    0 讨论(0)
  • 2020-11-28 19:29

    Implementing tap gesture

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "touchHappen") 
    view.userInteractionEnabled = true
    view.addGestureRecognizer(tap)
    

    Calls this function when the tap is recognized.

    func touchHappen() {
        //Causes the view (or one of its embedded text fields) to resign the first responder status.
        self.view.endEditing(true)
    }
    

    Update for For Swift 3 +

    let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchHappen(_:)))
    yourView.addGestureRecognizer(tap)
    yourView.userInteractionEnabled = true
    
    func touchHappen(_ sender: UITapGestureRecognizer) {
        print("Hello Dear you are here")
    }
    
    0 讨论(0)
  • 2020-11-28 19:29

    xCode 9.3, Swift 4.0

    class BaseVC: UIViewController, UIGestureRecognizerDelegate { 
    
          @IBOutlet weak var iView: UIView!
    
          override func viewDidLoad() {
              super.viewDidLoad()
              let clickUITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.onSelect(_:)))
              clickUITapGestureRecognizer.delegate = self
              iView?.addGestureRecognizer(tap)
          }
    
          func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
              return true
          }
    
    
         @IBAction func onSelect(_ sender: Any) {
    
         }
    }
    
    0 讨论(0)
提交回复
热议问题