Как лучше всего реагировать на тап в ячейке?


#1

Добрый день, у меня есть Collection View, там 2 ячейки и в первой ячейке я нарисовал 4 ShapeLayer с определёнными операциями, мне нужно различать тапы на разные Layer-ы, а если тап вне Layer-а - то игнорировать его. Вот так это выглядит

И в общем то, вопрос, через что лучше реализовать эти самые распознавания тапов?


#2

Если каждая кнопка это отдельная view, тогда вешай на них TapGestureRecognizer.
Метод didSelectItemAt тебе тут совсем не нужен.
Если нужно будет передавать что-то при нажатии на кнопки, тут поможет делегат из ячейки.


#3

Каждая кнопку это CAShapeLAyer


#4

Тогда так

P.S. очень красиво вышло


Доступ к методам TableView из TableViewCell
#5

Так, с этим методом я знаком, значит реализовать я могу его в классе ячейки, а как потом передать эту информацию в View controller, на котором collectionView, а далее с него уже организую переход на другой View controller через seque


#6

Через делегат, который вы так же создадите

protocol CellDelegate: class {
    func didTapLayerButton(operation: String)
}

class Cell: UICollectionViewCell {

    weak var delegate: CellDelegate?
    ...

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        let point = touch!.location(in: self.view)
        if plusLayer.path!.contains(point) {
            delegate?.didTapLayerButton(operation: "plus")
        } else if minusLayer.path!.contains(point) {
            delegate?.didTapLayerButton(operation: "minus")
        } else if ...
        //и т.д.
    }
}

А в вашем VC когда формируете ячейку в методе cellForRowAt, укажите делегата
cell.delegate = self

P.S. для передачи операции лучше использовать enum


#7

Огромное спасибо, реализую - отпишу


#8

а куда передаётся эта информация из делегата, и когда я написал cell.delegate = self
У меня ошибка вылезла
Cannot assign value of type ‘ViewController’ to type 'CellDelegate?
Думаю все проблемы из за того, что я не знаю что такое делегат, пойду изучать :slight_smile:


#9

Достаточно будет посмотреть видео от Swiftbook с таблице и делегатом, либо любое другое видео. Принцип делегатов не отличается между таблицей или списком.


#10

большое спасибо, все работает как и требовалось)


#11

Был бы вам очень признателен, если бы вы смогли показать код этих кнопок, если это не тайна.
Очень нравится как это смотрится.