Получение элемента IndexPath в TableView, встроенного в CollectionView - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть TableView, который встроен в CollectionView, и я пытаюсь показать соответствующие данные в TableView, которые соответствуют правильному CollectionViewCell или IndexPath Item. Я попытался назначить тег так: cell.tableView.tag = indexPath.item, но это кажется проблематичным.

Я попытался print(tableView.tag) в моей коллекции ViewCell, и она напечатала 2 1 0 3 4 5 но у меня всего 7 collectionViewCells, поэтому последний тег по какой-то причине не печатается.

Мой collectionView уже встроен в другой TableView, ниже приведен код в MasterTableViewCell.swift:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


        if diningIndexPath.section == 0 {
            let cell: FoodCourtCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "foodCourtCell", for: indexPath) as! FoodCourtCollectionViewCell

            cell.tableView?.register(UINib(nibName: "RestaurantTableViewCell", bundle: nil), forCellReuseIdentifier: "restaurantCell")


            cell.tableView.tag = indexPath.item

            //...

            return cell
      }
}

В customCollectionViewCell.swift у меня есть этот код для моего tableView:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: RestaurantTableViewCell = tableView.dequeueReusableCell(withIdentifier: "restaurantCell", for: indexPath) as! RestaurantTableViewCell

        print(tableView.tag)

        let currentRestaurant = foodCourts[tableView.tag].childLocations[indexPath.row]
        cell.textLabel.text = currentRestaurant.name

        //...

        return cell
    }

Есть ли способ исправить это или есть другие способы добиться того, что я хочу сделать? Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Вложение этих сущностей - всегда боль, особенно когда вам необходимо получить доступ к indexPaths элементов позже. Если, если вы получите вашу проблему правильно. Одно из решений, которое я предлагаю, - сохранить карту (словарь) ваших путей. Для быстрого доступа к ним. Вот пример того, как мне это удалось в подобной ситуации:

typealias CollectionIndexPath = IndexPath
typealias TableIndexPath = IndexPath
var indexMap: [CollectionIndexPath: TableIndexPath] = [:]

Теперь, когда вам нужно получить доступ к некоторым элементам или настроить его.

func cellForItemAtIndexPath { ... } {
     let cell = { ... }

     let cellPath = indexPath
     let tablePath = indexMap[cellPath]
     let foodCourtForCell = foodCourts[cellPath.item]
     let childLocationsForTableView = foodCourtForCell.childLocations

     cell.configureWith(court: foodCourtForCell, locations: childLocations)

Теперь вы можете управлять всеми данными, связанными с этим вложенным монстром извне.

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