如何填充在行中嵌入有collectionViews的tableView并按类型或类别组织它们?

时间:2019-06-01 11:36:45

标签: ios swift google-cloud-firestore alamofire

我有一个事件/场地管理应用程序,一个视图以json格式接收事件的数据,其中每个事件都有一个类别或类型。如何在嵌入在TableView单元格中的collectionView中填充和组织事件,其中每个TableView单元格都是要显示的类别或类型。 可能的话,在Swift中回答

2 个答案:

答案 0 :(得分:1)

使用带有类别的JSON填充表格视图,并在cellForRowAt方法中将单个类别传递给collectionView(您的表格视图单元格类具有collectionView属性),使用

重新加载collectionView
cell.singleCategory = categories[indexPath.row]
cell.collectionView.reloadData()

将您的collectionView出口和委托放置在tableView Cell类中,并创建保存单个类别数据的属性,将类别数据传递给该tableView Cell类,并在cellForItemAt中填充单个类别数据

示例:

class MyTeamTVC: UITableViewCell {

    @IBOutlet weak var collectionView: UICollectionView!
        var singleCategory = [Category]()
override func awakeFromNib() {

        collectionView.register(UINib(nibName: "cell", bundle: nil), forCellWithReuseIdentifier: "cell")

    }
    }

extension MyTeamTVC: UICollectionViewDelegate, UICollectionViewDataSource {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return category.types.count
    }

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

        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? StatsCVC else {return UICollectionViewCell()}

        cell.nameLabel.text = singleCategory.types[indexPath.row]
        return cell
    }

}

答案 1 :(得分:1)

创建具有所有可用属性的结构,并为类别添加枚举

struct Event {
    enum Category {
        case a
        case b
        case c
    }
    var category: Category
    var eventName: String
    //...
}

创建事件对象的二维数组

var groupedEventsArr = [[Event]]()

从服务器收到数据后,请创建一个Event对象数组。

let eventsArr:[Event] = //json parse

然后根据category

对数组对象进行分组
groupedEventsArr = Array(Dictionary(grouping: eventsArr, by: { $0.category }).values)

现在在tableview,collection view数据源方法中使用此数组

// tableview

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return groupedEventsArr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    let category = groupedEventsArr[indexPath.row].first?.category
    return cell!
}

//收藏夹视图

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return groupedEventsArr[section].count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
    let event = groupedEventsArr[indexPath.section][indexPath.item]
    return cell
}