Swift: щелкните внутри сгенерированного программным способом представления внутри таблицы - PullRequest
0 голосов
/ 19 февраля 2020

Многое перепробовал, но ничего из этого не вышло.

Моя текущая иерархия представлений:

  • Ячейка TableView
  • Вертикальное представление стека
  • Вид, сгенерированный программно - распознаватель жестов не сработал

    let vContainer = UIView()
    vContainer.translatesAutoresizingMaskIntoConstraints = false
    vContainer.isUserInteractionEnabled = true
    vContainer.backgroundColor = .red
    //Some view generation inside box is skipped (can be seen on image)
    self.vsvViewContainer.addArrangedSubview(vContainer)
    var tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(showValuePicker(sender:)))
    vContainer.addGestureRecognizer(tapRecognizer)
    

позже в классе:

    @objc private func showValuePicker(sender: UITapGestureRecognizer) {
        print("showValuePicker")
    }

enter image description here

Красное поле - «Вид», куда я хочу добавить клик.

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Почему вы указали цель nil?

в:

var tapRecognizer = UITapGestureRecognizer(target: nil, action: #selector(showValuePicker(sender:)))

Из документации :

Цель

Объект, являющийся получателем сообщений действия, отправленных получателем, когда он распознает жест. nil не является допустимым значением.

Можете ли вы попробовать добавить self в качестве цели?

0 голосов
/ 19 февраля 2020

Обнаружена проблема ...

"self" указывало на класс View Generating, который не имеет отношения к View Controller

Передача событий щелчка непосредственно в решенную проблему View Controller

0 голосов
/ 19 февраля 2020

Добавьте tapRecognizer.cancelsTouchesInView = false к вашему коду

self.vsvViewContainer.addArrangedSubview(vContainer)
var tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(showValuePicker(sender:)))
tapRecognizer.cancelsTouchesInView = false
vContainer.addGestureRecognizer(tapRecognizer)
...