Вот скриншот пользовательского интерфейса
У меня есть коллекция над моей таблицей. Я пытаюсь изменить данные представления таблицы в зависимости от того, какая ячейка представления коллекции выбрана.
Это представление обрабатывает выбор пунктов меню, а пункты меню отображаются в табличном представлении. Категории для этих пунктов меню отображаются в виде коллекции с горизонтальной прокруткой прямо над табличным представлением.
Класс ресторана имеет переменную экземпляра, .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
}
Прямо сейчас мой результат (очевидно) заключается в том, что просто все мои пункты меню отображаются в табличном представлении, независимо от того, какая ячейка представления выбрана.
Для вашего вопроса необходимы две вещи в следующем формате.
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] Удалить.
я говорю два предложения