UICollectionView didSelectItem возвращает неправильный путь индекса - PullRequest
0 голосов
/ 31 октября 2018

Я использую UICollectionView в своем приложении, чтобы пользователь мог выбирать между парой городов и ресторанами в этих городах.

Сначала я загружу города с ресторанами в них.

cities = RestaurantsLoader.cities()

Затем я заполню UICollectionView ими.

extension RestaurantPickerViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 40, height: 40)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 1
    }
}

И затем отобразить их (с UILabel, потому что я еще не успел создать пользовательскую ячейку)

extension RestaurantPickerViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return cities[section].restaurants.count
    }

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return cities.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "normalCell", for: indexPath)  
        cell.viewWithTag(123)?.removeFromSuperview()

        let label = UILabel(frame: cell.bounds)
        label.text = cities[indexPath.section].restaurants[indexPath.item].name
        label.textAlignment = .center
        label.tag = 123
        cell.addSubview(label)

        return cell
    }
}

Теперь я реализовал didSelectItem функцию UICollectionView.

extension RestaurantPickerViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print(indexPath)
    }
}

Однако этот indexPath почти всегда выключен. Когда я нажимаю ячейку, расположенную в разделе: 1, элемент: 25, она печатает раздел: 2, например, элемент: 0. Я нахожу это действительно странным и не встречал ничего подобного раньше. Что я делаю неправильно? Или как я могу это исправить?

1 Ответ

0 голосов
/ 21 марта 2019

Вы должны использовать "indexPath.item"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...