user4790024
user4790024

Reputation:

multiple UILabels tap for same UITapGestureRecogniser Not working

I am trying to add same UITapGestureRecognizer to multiple views as

  var tapGesture = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        tapGesture.numberOfTapsRequired = 1

        serviceLbl.addGestureRecognizer(tapGesture)
        pickUpTimeLbl.addGestureRecognizer(tapGesture)
        drivingLbl.addGestureRecognizer(tapGesture)
        communicateLbl.addGestureRecognizer(tapGesture)
        bikeConditionLbl.addGestureRecognizer(tapGesture)
        dropOffLbl.addGestureRecognizer(tapGesture)

        serviceLbl.tag = Service
        pickUpTimeLbl.tag = PickUpTime
        drivingLbl.tag = Driving
        communicateLbl.tag = Communicate
        bikeConditionLbl.tag = BikeCondition
        dropOffLbl.tag = DropOff


    }

    func selectOptionsForRating(tapsender:UITapGestureRecognizer){

        var sender = tapsender.view

        if sender!.tag == Service {
             println("tap gesture is working fine ")

        }else if sender!.tag == PickUpTime {
            println("tap gesture is working fine ")

        }else if sender!.tag == Driving {
            println("tap gesture is working fine ")

        }else if sender!.tag == Communicate {
            println("tap gesture is working fine ")

        }else if sender!.tag == BikeCondition {
            println("tap gesture is working fine ")

        }else if sender!.tag == DropOff {
            println("tap gesture is working fine ")

        }

Recognizing multiple UILabels tap for UITapGestureRecogniser This link shows me how to add same gesture recognizer to multiple views,but it doesnot works..Can't i add same gesture recognizer to multiple views?

Upvotes: 3

Views: 2616

Answers (2)

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71854

I think you can not do it with one Gesture but you can add different gesture for all and access same method for all. consider below code:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var serviceLbl: UILabel!
    @IBOutlet weak var pickUpTimeLbl: UILabel!
    @IBOutlet weak var drivingLbl: UILabel!
    @IBOutlet weak var communicateLbl: UILabel!
    @IBOutlet weak var bikeConditionLbl: UILabel!

    @IBOutlet weak var dropOffLbl: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        var tapGestureForserviceLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        var tapGestureForpickUpTimeLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        var tapGestureFordrivingLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        var tapGestureForcommunicateLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        var tapGestureForbikeConditionLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")
        var tapGestureFordropOffLbl = UITapGestureRecognizer(target: self, action: "selectOptionsForRating:")

        tapGestureForserviceLbl.numberOfTapsRequired = 1
        tapGestureForpickUpTimeLbl.numberOfTapsRequired = 1
        tapGestureFordrivingLbl.numberOfTapsRequired = 1
        tapGestureForcommunicateLbl.numberOfTapsRequired = 1
        tapGestureForbikeConditionLbl.numberOfTapsRequired = 1
        tapGestureFordropOffLbl.numberOfTapsRequired = 1

        serviceLbl.userInteractionEnabled = true
        pickUpTimeLbl.userInteractionEnabled = true
        drivingLbl.userInteractionEnabled = true
        communicateLbl.userInteractionEnabled = true
        bikeConditionLbl.userInteractionEnabled = true
        dropOffLbl.userInteractionEnabled = true

        serviceLbl.addGestureRecognizer(tapGestureForserviceLbl)
        pickUpTimeLbl.addGestureRecognizer(tapGestureForpickUpTimeLbl)
        drivingLbl.addGestureRecognizer(tapGestureFordrivingLbl)
        communicateLbl.addGestureRecognizer(tapGestureForcommunicateLbl)
        bikeConditionLbl.addGestureRecognizer(tapGestureForbikeConditionLbl)
        dropOffLbl.addGestureRecognizer(tapGestureFordropOffLbl)

        serviceLbl.tag = 1
        pickUpTimeLbl.tag = 2
        drivingLbl.tag = 3
        communicateLbl.tag = 4
        bikeConditionLbl.tag = 5
        dropOffLbl.tag = 6
    }

    func selectOptionsForRating(tapsender:UITapGestureRecognizer){

        var sender = tapsender.view!.tag

        switch sender {
        case 1 :
            println("tap gesture is working fine 1")
        case 2 :
            println("tap gesture is working fine 2")
        case 3 :
            println("tap gesture is working fine 3")
        case 4 :
            println("tap gesture is working fine 4")
        case 5 :
            println("tap gesture is working fine 5")
        case 6 :
            println("tap gesture is working fine 6")
        default :
            println("tap gesture can not find view")
        }
    }
}

For more Information you can refer this Apple Documentation.

Hope It will help you.

Upvotes: 6

Dhaval Mistry
Dhaval Mistry

Reputation: 153

For using UITapGestureRecognizer on Uilabel ... you must Set label.userInteractionEnabled = true . just add this line to viewWillAppear and it will Work just Fine.

Upvotes: 0

Related Questions