根据选择哪个collectionview单元格显示不同的tableview数据

时间:2019-06-27 22:30:02

标签: swift uitableview uicollectionviewcell

Here's a screenshot of the UI

我在表格视图上方有一个collectionview。我正在尝试根据选择哪个collectionview单元来更改tableview的数据。

此视图处理菜单项的选择,并且菜单项显示在表格视图中。这些菜单项的类别显示在表格视图正上方的水平滚动集合视图中。

餐厅类具有实例变量(Name, Role, id),该实例变量返回字符串数组。这就是填充collectionview的内容。菜单项类具有实例变量.categories,该实例变量返回单个字符串。我打算匹配这两个。

我的预期结果:对于collectionview中的每个选定单元格,获取其类别名称并将其传达给tableview。表格视图应使用此名称,并在其菜单项中进行过滤以检查匹配的类别名称。显示这些特定的表格视图单元格。

对于我的收藏夹视图:

.category

对于我的表视图:


    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
    }

现在,我的结果(很明显)是,无论选择哪个collectionview单元,我的所有菜单项都将显示在表视图中。

2 个答案:

答案 0 :(得分:0)

如何存储不同的类别?您是否为每个类别使用一个数组,并在CollectionView中选择一个选项后将该特定数组发送到TableView?然后,您需要刷新TableView,以使更改反映在界面中。

我也看不到用户在CollectionView中所按的位置。 ...你不能使用这样的东西...

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

}

要获取他们选择的内容,请使用该选择通过写入不同的数组或仅根据类别添加某些数组元素来更新表,然后使用reloadData()刷新表。

答案 1 :(得分:0)

以下问题形式需要做两件事。

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

中数据传输的最简单方法之一