2016-03-10 3 views
0

Я создаю приложение для резюме (в основном для удовольствия) и, похоже, не может заставить распознаватель жестов использовать для меня работу. Я хотел бы, чтобы одна метка отображала информацию и меняла ее, в зависимости от того, на какой ярлыке названия они нажимают ниже. Вот код, который я написал: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!" 
    } 
} 

То, что происходит в том, что последний ярлык, чтобы иметь addGestureRecognizer() вызывается в viewDidLoad() является единственным, который работает. Если я прокомментирую последнюю строку, тогда будет только надпись над ней. Я также попытался включить взаимодействие с пользователем на каждом из этикеток программно и на инспекторе атрибутов и ничего не изменил.

+0

вы должны добавить различные tapgestures на каждой этикетке – techloverr

+1

Вы выделяя его только один раз и как предполагается, будет работать на каждой этикетке? –

ответ

1

Согласно Событие от Apple Handling Guidelines

Жест распознования прикрепляются к View

Каждый распознаватель жеста связан с один вид. В отличие от этого, представление может иметь несколько распознавателей жестов , потому что один вид может реагировать на множество разных жестов . Чтобы распознаватель жестов распознавал штрихи, которые происходят в определенном виде, , вы должны прикрепить распознаватель жестов к . Когда пользователь касается этого вида, распознаватель жестов получает сообщение о том, что перед объектом просмотра произошло касание. В результате распознаватель жестов может ответить на вопросы от имени .

Поэтому вам нужно создать несколько экземпляров UITapGestureRecognizer и прикрепить их к каждому виду, даже если они выполняют те же действия.

Например,

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

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

и так далее.

1

Вот документация от Apple, как определено here.

Жест распознаватель работает на касаний хит проверенными на конкретного зрения и все из подвидов этого вида. Таким образом, это должно быть связано с этой точкой зрения. Чтобы сделать эту связь, вы должны вызвать метод UIView addGestureRecognizer :. Устройство распознавания жестов не участвует в цепочке ответчиков представления.

Это означает, что для каждого вида необходимо иметь отдельные экземпляры «UIGestureRecognizer». Это должно решить проблему.

0

Xcode имеет небольшую иконку в Xcode, которую вы видите на этом снимке экрана, на который вы можете щелкнуть, когда приложение работает. Как я сказал на этом снимке экрана, это бесценно, когда вы пытаетесь понять, что происходит с проблемами пользовательского интерфейса?

enter image description here