我们如何在Outlet Collection中添加UIGestureRecognizer?

时间:2017-03-29 13:53:32

标签: ios swift3 uilabel uitapgesturerecognizer iboutletcollection

我正在尝试为标签[UILabel]的插座集合添加一个点击手势,如下所示:

@IBOutlet var subLabels: [UILabel]!

    override func viewDidLoad() {
            super.viewDidLoad()

            let tap = UITapGestureRecognizer(target: self, action: #selector(HomePageViewController.selectSubLabel(tap:)))
            tap.numberOfTapsRequired = 1
            tap.cancelsTouchesInView = false

            for i in (0..<(subLabels.count)) {
                subLabels[i].addGestureRecognizer(tap)
            }
    }

    func selectSubLabel(tap: UITapGestureRecognizer) {
            print("Gesture Is WORKING!")
        }

我尝试将它添加到故事板中的单个标签上;但没有工作。

2 个答案:

答案 0 :(得分:4)

首先,您需要在标签上允许用户交互(默认情况下它已关闭):

for i in (0..<(subLabels.count)) {
    subLabels[i].isUserInteractionEnabled = true
    subLabels[i].addGestureRecognizer(tap)
}

但是手势识别器只能在一个视图中观察手势。 所以,有两种选择:

予。每个标签的专用手势识别器

for i in (0..<(labels.count)) {
    let tap = UITapGestureRecognizer(target: self, action: #selector(selectSubLabel(tap:)))
    labels[i].isUserInteractionEnabled = true
    labels[i].addGestureRecognizer(tap)
}

II。一个手势识别器,用于标签的父视图

override func viewDidLoad() {
    super.viewDidLoad()

    for i in (0..<(labels.count)) {
        subLabels[i].isUserInteractionEnabled = true
    }

    let tap = UITapGestureRecognizer(target: self, action: #selector(selectSubLabel(tap:)))
    view.addGestureRecognizer(tap)
}

func selectSubLabel(tap: UITapGestureRecognizer) {
    let touchPoint = tap.location(in: view)
    guard let label = subLabels.first(where: { $0.frame.contains(touchPoint) }) else { return }

    // Do your stuff with the label
}

答案 1 :(得分:1)

请检查Xcode User Interaction EnabledUIlabel的{​​{1}}属性。必须勾选Attribute inspector才能检测到点按。请参见下图,

enter image description here