Отображение различных данных tableview в зависимости от того, какая ячейка collectionview выбрана

Дэвид Чен

Вот скриншот пользовательского интерфейса

У меня есть коллекция над моей таблицей. Я пытаюсь изменить данные представления таблицы в зависимости от того, какая ячейка представления коллекции выбрана.

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

Класс ресторана имеет переменную экземпляра, .categoriesкоторая возвращает массив строк. Это то, что заполняет представление коллекции. Класс пункта меню имеет переменную экземпляра, .categoryкоторая возвращает единственную строку. Я намереваюсь соответствовать этим двум.

Мой предполагаемый результат: для каждой выбранной ячейки в представлении коллекции возьмите имя категории и передайте его в представление таблицы. Табличное представление должно брать это имя и фильтровать его пункты меню, чтобы проверить соответствие имен категорий. Отобразите эти конкретные ячейки tableview.

Для моей коллекции:


    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if let count = restaurant?.categories.count {
            return count
        } else {
            return 0
        }
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! CategoryCell

        // Sets label text and images for each category
        cell.categoryLabel.text = restaurant?.categories[indexPath.row]
        if UIImage(named: (restaurant?.categories[indexPath.row])!) != nil {
            cell.buttonView.image = UIImage(named: (restaurant?.categories[indexPath.row])!)
        }

        return cell
    }

Для моего просмотра таблицы:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let count = restaurant?.menuItems.count {
            return count
        } else {
            return 0
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = masterTableView.dequeueReusableCell(withIdentifier: "menuCell", for: indexPath) as! MenuItemCell
        cell.selectionStyle = UITableViewCell.SelectionStyle.none

        let currentItem = restaurant?.menuItems[indexPath.row]
        cell.item = currentItem

        return cell
    }

Прямо сейчас мой результат (очевидно) заключается в том, что просто все мои пункты меню отображаются в табличном представлении, независимо от того, какая ячейка представления выбрана.

McDonal_11

Для вашего вопроса необходимы две вещи в следующем формате.

1. ресторан?. Значения категорий:

[popular, milk tea, snacks, tea, ...]

2. restaurant? .MenuItems значения:

{
    popular : [
                {
                    "name" : "thai-tea",
                    "price": "$6",
                    "thumbnailURL" : "https://.../thai.png"
                },
                {
                    "name" : "milk-tea",
                    "price": "$3",
                    "thumbnailURL" : "https://.../ml.png"
                }
            ],
    snacks : [
                {
                    "name" : "brownie",
                    "price": "$7",
                    "thumbnailURL" : "https://.../brw.png"
                },
                {
                    "name" : "pasta",
                    "price": "$3",
                    "thumbnailURL" : "https://.../pas.png"
                }
            ]
}

Глобальная переменная

var whichCellSelect : Int = 0

CollectionView

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    whichCellSelect = indexPath.item
    yourTableView.reloadData()
}

Tableview

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let count = restaurant?.menuItems.count {
        return count
    } else {
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = masterTableView.dequeueReusableCell(withIdentifier: "menuCell", for: indexPath) as! MenuItemCell
    cell.selectionStyle = UITableViewCell.SelectionStyle.none

    let currentCategory = restaurant?.categories[whichCellSelect] // You will get String here
    let currentMenuItem = restaurant?.menuItems[currentCategory] // You will get Array here
    cell.item = currentItem

    return cell
}

Ноты

Убедитесь, что тип данных restaurant? .Categories - как, [String]а тип данных restaurant? .MenuItems - как [String : Any]. Это один из самых простых способов понять передачу данных вUIViewController

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Merging legends in plotly subplot

  3. 3

    Проблема с window.print в Safari

  4. 4

    migrate MongoDB container service - mongodump command not found

  5. 5

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  6. 6

    QString удалить последние символы

  7. 7

    JetBrains Rider enable-migrations для ASP.NET MVC на Mac

  8. 8

    Почему `curve_fit` не может оценить ковариацию параметра, если параметр подходит точно?

  9. 9

    Ошибка XDG0062: не удалось установить «Контент». в режиме навигации MUXC

  10. 10

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  11. 11

    Как загрузить ZIP-файл в Nexus с помощью Maven и избежать создания артефакта pom в Nexus?

  12. 12

    Flutter: Unhandled Exception: FileSystemException: Creation failed, path = 'Directory: '' (OS Error: Read-only file system, errno = 30)

  13. 13

    How to convert C++/CLI string to const char*

  14. 14

    Установка pip с использованием Python 2.7, установленного в ArcGIS

  15. 15

    Symfony 4, Postgres - `Неверное значение параметра client_encoding:« utf8mb4 »` при выполнении команды doctrine

  16. 16

    HTML Body говорит cz-shortcut-listen = "true" с инструментами разработчика Chrome?

  17. 17

    Реакция Как условно переопределить цвет ошибки TextField в Material-UI?

  18. 18

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  19. 19

    Qt - не растягивать виджеты в QVBoxLayout

  20. 20

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  21. 21

    ViewPager2 мигает / перезагружается при смахивании

популярныйтег

файл