多个UILabels点击相同的UITapGestureRecogniser无效

时间:2015-07-03 06:40:13

标签: ios swift uilabel uitapgesturerecognizer

我正在尝试将相同的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这个链接向我展示了如何为多个视图添加相同的手势识别器,但它不起作用。我不能为多个视图添加相同的手势识别器吗?

2 个答案:

答案 0 :(得分:5)

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

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

希望它会对你有所帮助。

答案 1 :(得分:0)

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