我有一个事件/场地管理应用程序,一个视图以json格式接收事件的数据,其中每个事件都有一个类别或类型。如何在嵌入在TableView单元格中的collectionView中填充和组织事件,其中每个TableView单元格都是要显示的类别或类型。 可能的话,在Swift中回答
答案 0 :(得分:1)
使用带有类别的JSON填充表格视图,并在cellForRowAt方法中将单个类别传递给collectionView(您的表格视图单元格类具有collectionView属性),使用
重新加载collectionViewcell.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
}