我正在尝试在UITableView中实现节和行,但是由于嵌套的JSON模型结构,我无法成功。它总是只打印first section title
。我正在使用Codable
方法,并且无法更改模型结构。
如何在tableView
中实现节和行?任何指导或帮助将不胜感激。我真的为此感到挣扎。
我需要在tableView中显示的
title
和行textField
-请参阅JSON。 section title
模型:
struct SectionList : Codable {
let title : String?
var items : [Item]?
}
struct Item : Codable {
let actionType : Int?
var textField : String?
let pickList: [SectionList]?
let itemValue: String?
let version: Int?
}
初始化和TableView代码:
var AppData: [Item]?
let decoder = JSONDecoder()
let response = try decoder.decode(SectionList.self, from: pickResult)
let res = response.items?.filter { $0.actionType == 101}
self.AppData = res
func numberOfSections(in tableView: UITableView) -> Int {
return AppData?.count ?? 0
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return AppData?[section].pickList[0].title
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return AppData?[section].pickList?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
let dic = AppData?[indexPath.section]//.pickList?[indexPath.row].title
//AppData?[indexPath.section].pickList[indexPath.row].items
//print(dic)
return cell
}
最佳答案
不管您有多了解,我都能做到。检查此代码
将结构创建为
struct SectionList : Codable {
let title : String?
var items : [RowItems]?
}
struct RowItems: Codable {
var textField : String?
let itemValue: String?
}
struct SourceData: Codable {
let items: [Item]?
}
struct Item : Codable {
let actionType : Int?
let pickList: [SectionList]?
let version: Int?
}
创建类似于的变量
var AppData: Item?
将json解析为
let decoder = JSONDecoder()
let response = try decoder.decode(SourceData.self, from: data)
let res = response.items?.filter { $0.actionType == 101}
print("jsonData:\(res)")
AppData = res?.first
call 表数据源为
func numberOfSections(in tableView: UITableView) -> Int {
return AppData?.pickList?.count ?? 0
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return AppData?.pickList?[section].title
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return AppData?.pickList?[section].items?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
let dic = AppData?.pickList?[indexPath.section].items?[indexPath.row]//.pickList?[indexPath.row].title
//AppData?[indexPath.section].pickList[indexPath.row].items
//print(dic)
cell.textLabel?.text = dic?.textField
return cell
}
使用此代码的屏幕截图
关于ios - 节和行未正确显示在UITableView Swift中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60184596/