多个 UILabels 点击相同的 UITapGestureRecogniser 不工作

multiple UILabels tap for same UITapGestureRecogniser Not working

我正在尝试将与

相同的 UITapGestureRecognizer 添加到多个视图
  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 link 向我展示了如何将相同的手势识别器添加到多个视图,但它不起作用..我不能将相同的手势识别器添加到多个视图吗?

我认为你不能用一个手势来完成,但你可以为所有人添加不同的手势并为所有人访问相同的方法。考虑以下代码:

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")
        }
    }
}

有关更多信息,您可以参考此 Apple Documentation

希望对你有所帮助。

要在 Uilabel 上使用 UITapGestureRecognizer ...您必须设置 label.userInteractionEnabled = true。只需将此行添加到 viewWillAppear 即可正常工作。