【问题标题】:multiple UILabels tap for same UITapGestureRecogniser Not working多个 UILabel 轻按相同的 UITapGestureRecogniser 不工作
【发布时间】:2015-07-03 06:40:12
【问题描述】:

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

【问题讨论】:

    标签: ios swift uilabel uitapgesturerecognizer


    【解决方案1】:

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

    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

    希望对你有所帮助。

    【讨论】:

    • 是的..我知道我可以制作手势识别器的新实例..但为什么我不能只使用一个?
    • 感谢您的链接...我看起来一样...所以,是不是由于命中测试方法...所以添加到许多视图的 Tapgesture 识别器对找到响应者感到困惑?
    【解决方案2】:

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

    【讨论】:

    • 实际上,如果只有一个标签,它就可以正常工作......当有多个视图时,我希望相同的手势识别器工作......在我的情况下标签
    • OP 的问题是关于多个 UILabel 不能在同一个 TapRecognizer 上工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多