刚刚开始使用swift,我遇到的问题是我自己无法解决它。
所以在这里,我得到了一个像这样结构的视图
并想象我有一个像这样的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中。
更可能需要像这样的结果
如何通过TableViewCell动态地将数据附加到CollectionView中?一直在寻找许多方法和许多源代码,但大多数是静态数据和swift 2/3,而我正在使用swift 4。
答案 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!
}
故事板
输出