gpt4 book ai didi

ios - 动态 CollectionView 依赖于 SWIFT 4.0 中的 TableViewCell 值

转载 作者:行者123 更新时间:2023-11-28 12:05:51 25 4
gpt4 key购买 nike

刚开始使用 swift,我遇到了我自己无法解决的问题。

所以在这里,我得到了一个结构如下的 View

ViewController Structure

想象一下我有一个这样的 json 数组:

{           
"SCREENTIME": "15:00",
"FORMAT": "2D"
},
{
"SCREENTIME": "17:00",
"FORMAT": "2D"
},
{
"SCREENTIME": "21:00",
"FORMAT": "2D"
},
{
"SCREENTIME": "12:00",
"FORMAT": "3D"
},
{
"SCREENTIME": "14:00",
"FORMAT": "3D"
}

“FORMAT”变量将放置在 TableView 中,而“SCREENTIME”将放置在 CollectionView 中。

更有可能需要这样的结果

Result be like this

如何通过TableViewCell将数据动态追加到CollectionView中?一直在寻找许多方法和许多源代码,但其中大多数是静态数据和 swift 2/3,而我使用的是 swift 4。

最佳答案

在将 JSON 序列化为数组后,您需要对数据进行排序

你的数组数据

let array = [
[
"SCREENTIME": "15:00",
"FORMAT": "2D"
],
[
"SCREENTIME": "17:00",
"FORMAT": "2D"
],
[
"SCREENTIME": "21:00",
"FORMAT": "2D"
],
[
"SCREENTIME": "12:00",
"FORMAT": "3D"
],
[
"SCREENTIME": "14:00",
"FORMAT": "3D"
]]

排序

var sortedArray : [String:[String]] = [:]
for dictionary in array {
if let key = dictionary["FORMAT"]{
if let screenTime = dictionary["SCREENTIME"] {
if sortedArray[key] != nil {
sortedArray[key]?.append(screenTime)
}else{
sortedArray[key] = [screenTime]
}
}
}

预期输出

print("Sorted Array = \(sortedArray)")
print("Number of TableView Cells : \(sortedArray.count)")
for (index, key) in sortedArray.keys.enumerated() {
print("Number of CollectionView Cells for Tableview cellIndex \(index) = \(sortedArray[key]!.count)")
}

Sorted Array = ["3D": ["12:00", "14:00"], "2D": ["15:00", "17:00", "21:00"]]

Number of TableView Cells : 2

Number of CollectionView Cells for Tableview cellIndex 0 = 2

Number of CollectionView Cells for Tableview cellIndex 1 = 3

将此应用到您的 UI - 请引用此示例代码

ViewController.swift

class ViewController: UIViewController,UITableViewDataSource {

var sortedArray : [String:[String]] = [:]

override func viewDidLoad() {
tableView.dataSource = self
let array = [ ["SCREENTIME": "15:00","FORMAT": "2D"],["SCREENTIME": "17:00","FORMAT": "2D"],["SCREENTIME": "21:00","FORMAT": "2D"],["SCREENTIME": "12:00","FORMAT": "3D"],["SCREENTIME": "14:00","FORMAT": "3D"]]

for dictionary in array {
if let key = dictionary["FORMAT"]{
if let screenTime = dictionary["SCREENTIME"] {
if sortedArray[key] != nil {
sortedArray[key]?.append(screenTime)
}else{
sortedArray[key] = [screenTime]
}
}
}
}
}

@IBOutlet weak var tableView: UITableView!

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sortedArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as! TableViewCell
let key = Array(sortedArray.keys)[indexPath.row]
cell.labelShowtype.text = key
cell.loadCollectionView(array: sortedArray[key]!)
return cell
}

}

自定义 TableView 单元格

class TableViewCell: UITableViewCell,UICollectionViewDataSource {
@IBOutlet weak var labelShowtype: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
var array = [String]()
override func awakeFromNib() {
self.collectionView.dataSource = self
}
func loadCollectionView(array:[String]) {
self.array = array
self.collectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return array.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
cell.labelTime.text = self.array[indexPath.row]
return cell
}
}

自定义 Collection View 单元格

class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var labelTime: UILabel!
}

Storyboard

enter image description here

输出

enter image description here

关于ios - 动态 CollectionView 依赖于 SWIFT 4.0 中的 TableViewCell 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com