UITapGestureRecognizer仅适用于最后一项

时间:2016-03-10 06:27:55

标签: ios swift uitapgesturerecognizer

我正在创建一个简历应用程序(主要是为了好玩)并且似乎无法让轻拍手势识别器为我工作。我想要的是让一个标签显示信息并根据他们在下面点击的标题标签进行更改。这是我写的代码:

import UIKit

class WorkHistoryViewController: UIViewController {

    // MARK: Properties

    @IBOutlet weak var jobOne: UILabel!
    @IBOutlet weak var jobTwo: UILabel!
    @IBOutlet weak var jobThree: UILabel!
    @IBOutlet weak var jobFour: UILabel!
    @IBOutlet weak var jobFive: UILabel!
    @IBOutlet weak var workHistoryDescriptionLabel: UILabel!
    let tapRec = UITapGestureRecognizer()

    override func viewDidLoad() {
        super.viewDidLoad()
        tapRec.addTarget(self, action: "tappedLabel")
        jobOne.addGestureRecognizer(tapRec)
        jobTwo.addGestureRecognizer(tapRec)
        jobThree.addGestureRecognizer(tapRec)
        jobFour.addGestureRecognizer(tapRec)
        jobFive.addGestureRecognizer(tapRec)
    }

    // MARK: Methods

    func tappedLabel() {
        workHistoryDescriptionLabel.text = "It worked!"
    }
}

发生的事情是,在viewDidLoad()中调用addGestureRecognizer()的最后一个标签是唯一有效的标签。如果我注释掉最后一行,那么只有它上面的标签可以工作。我还尝试以编程方式和属性检查器在每个标签上启用用户交互,但都没有改变任何内容。

4 个答案:

答案 0 :(得分:1)

您需要创建点按手势的新对象才能完成工作。您可以参考showing images in UIScrollview horizontally on ipad and getting tag of image on tap

答案 1 :(得分:1)

根据Apple的事件处理指南

  

手势识别器附加到视图

     

每个手势识别器都是   与一个视图相关联。相比之下,视图可以有多个   手势识别器,因为单个视图可能会响应很多   不同的手势。用于识别触摸的手势识别器   在特定视图中出现,您必须将手势识别器附加到   那个观点。当用户触摸该视图时,手势识别器   接收到在视图对象之前发生触摸的消息。   结果,手势识别器可以代表响应触摸   观点。

因此,您需要创建UITapGestureRecognizer的多个实例,并将它们附加到每个视图,即使它们执行相同的操作。

例如,

let tapRecOne = UITapGestureRecognizer()
tapRecOne.addTarget(self, action: "tappedLabel")
jobOne.addGestureRecognizer(tapRecOne)

let tapRecTwo = UITapGestureRecognizer()
tapRecTwo.addTarget(self, action: "tappedLabel")
jobTwo.addGestureRecognizer(tapRecTwo)

等等。

答案 2 :(得分:1)

以下是Apple定义的here文档。

  

手势识别器针对特定视图和所有该视图的子视图进行了热门测试。因此必须与该观点相关联。要建立该关联,您必须调用UIView方法addGestureRecognizer:。手势识别器不参与视图的响应者链。

这意味着您需要为每个视图分别设置“UIGestureRecognizer”实例。这应该解决这个问题。

答案 3 :(得分:0)

Xcode在Xcode中有一个小图标,您可以在此屏幕截图中看到,您可以在应用程序运行时单击该图标。正如我在这个屏幕截图中所做的那样,在尝试了解UI问题时会发生什么?

enter image description here