didSelectRowAt не дает поставить рейтинг в ячейках, сразу переходит на новый viewController

swift
ios

#1

Здравствуйте!
Я создал UICollectionView и поместил его в UIViewController, используется метод didSelectRowAt для перехода на новый viewController и там же передаются данные, в этих же ячейках присутствует рейтинг (pod Cosmos) при попытке сменить рейтинг, пользователя направляет на новый view, можете подсказать как с этим бороться или поясните каким способом лучше это реализовать?


#2

Поставьте на всю область рейтинга isUserInteractionEnabled = true


#3

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


#4

Все подробно вы описали. Еще раз проверьте, что бы на View с вашим рейтингом стояло isUserInteractionEnabled = true


#5

CosmosView наследуется от UIView, я все правильно сделал?


#6

Глянул у себя в проекте и я немного был не прав.
isUserInteractionEnabled = true - нужно, но этого мало.
Вам следует отказаться от метода didSelectItemAt.
Вам нужно в классе ячейки повесить тап на всю ячейку + тап на ваш рейтинг, который уже должен висеть. Для тапа на ячейку, делайте метод делегата didCellTap и вызывайте его при тапе на ячейку. Передавайте в нем указатель на ячейку, а в вашем VC, когда реализуете этот метод, делайте переход, такой же как делали до этого.


#7

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

В главном view кнопка Все > открывает этот view
AllPizzaViewController, AllPizzaCollectionViewCell, реализация делегатов ячеек в файле Extensions


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

Делегат вы не сделали

protocol AllPizzaCollectionViewCellDelegate: class {
    func didCellTap(cell: AllPizzaCollectionViewCell)
}

class AllPizzaCollectionViewCell: UICollectionViewCell {
    weak var delegate: AllPizzaCollectionViewCellDelegate?
    ...
    func setupView() {
        ...
        let gestureCellTap = UITapGestureRecognizer(target: self, action: #selector(didCellTap))
        self.view.addGestureRecognizer(gestureCellTap)
    }

    @objc func didCellTap() {
        delegate?.didCellTap(cell: self)
    }
}

Добавляете тут

extension AllPizzaViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, AllPizzaCollectionViewCellDelegate {
    ...
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = ...
        ...
        cell.delegate = self

        return cell
    }

    func didCellTap(cell: AllPizzaCollectionViewCell) {
        print("tap in cell")
    }
}

#9

Спасибо за помощь, а как мне теперь передавать данные в ячейки? Они у меня в модели массивом хранятся


#10

let indexPath = tableView.indexPath(for: cell)


#11

Use of unresolved identifier ‘tableView’; did you mean ‘UITableView’?
у меня collectionView и это обычный метод, оно не хочет отрабатывать


#12
if let indexPath = collectionPizza.indexPathForCell(cell) {
    // тут работаете с indexPath
}

#13

Что не так я делаю)


#14

у вас collectionPizza, я поправил у себя в коде.