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

时间:2018-03-21 02:52:23

标签: ios json swift xcode storyboard

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

所以在这里,我得到了一个像这样结构的视图

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。

1 个答案:

答案 0 :(得分:2)

在将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)")
}
  

排序数组= [" 3D":[" 12:00"," 14:00"]," 2D":[ " 15:00"," 17:00"," 21:00"]]

     

TableView单元格的数量:2

     

Tableview的CollectionView单元格数量cellIndex 0 = 2

     

Tableview的CollectionView单元格数量cellIndex 1 = 3

将此应用到您的用户界面 - 请参阅此示例代码

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
 }
}

自定义集合查看单元

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

故事板

enter image description here

输出

enter image description here