显示来自 JSON 数据的 tableviewcell 内的标签
showing tags inside tableviewcell from JSON Data
我正在使用 Swift
创建应用程序,我想在 UITableViewCell
中显示一些标签 JSON 解析这里是我想在我的应用程序中做的屏幕截图
Here is the screen shot i want to do like this
如您在屏幕截图 Flat1 中所见,Flat2 是我想在 UITableVieCell 中显示的标签,用于显示我在下面使用的标签
This is the TagListView Which i have used
这是我的 JSON 来自 WebService
的数据
{
"success": "1",
"data": [
{
"fk_project_surveyors_id": "1",
"number": 1,
"created_date": "2020-04-17 10:09:57",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_sFZuFpUd011587136197.png",
"name": "Sean Clancy",
"inspections_id": "4",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 2,
"created_date": "2020-04-29 12:55:45",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
},
{
"sub_cores_title": "Flat 2"
}
],
"signature": "img_Ptw0bvSGfR1588182945.png",
"name": "Sean Clancy",
"inspections_id": "6",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 3,
"created_date": "2020-05-06 06:08:11",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_FSUTzxT4221588763291.png",
"name": "Sean Clancy",
"inspections_id": "7",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 4,
"created_date": "2020-06-15 04:25:16",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_EVqcz58zN11592213116.png",
"name": "Sean Clancy",
"inspections_id": "8",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 5,
"created_date": "2020-06-21 11:04:56",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_3ySNyhAjYd1592755496.png",
"name": "ron",
"inspections_id": "10",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 6,
"created_date": "2020-06-21 11:05:44",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_ILSykgAIW71592755544.png",
"name": "ron2",
"inspections_id": "11",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
}
],
"message": ""
}
如您在 JSON 数据中所见,每个项目都有 sub_cores 数组,从那个 sub_cores_title
我想显示在 TagListView
里面,它在 UITableViewCell
里面
这是我在上面解析过的模型结构JSON
public struct HistoryModel{
var fk_user_id: String?
var signature: String?
var fk_cores_id: String?
var name: String?
var inspections_id: String?
var fk_project_surveyors_id: String?
var created_date: String?
var number: String?
var survey_date: String?
var sub_cores: [SubCoreModelData]
public init(fk_user_id: String,signature: String,fk_cores_id: String,name: String,inspections_id: String,fk_project_surveyors_id: String,created_date: String,number: String,survey_date: String,sub_cores:[SubCoreModelData]) {
self.fk_user_id = fk_user_id
self.signature = signature
self.fk_cores_id = fk_cores_id
self.name = name
self.inspections_id = inspections_id
self.fk_project_surveyors_id = fk_project_surveyors_id
self.created_date = created_date
self.number = number
self.survey_date = survey_date
self.sub_cores = sub_cores
}
}
public struct SubCoreModelData{
var sub_core_title: String?
public init(sub_core_title: String?) {
self.sub_core_title = sub_core_title
}
}
这是我的代码API调用函数,我从中将数据存储到数组
var historyData = HistoryModel
func historyAPI(){
guard let uid = UserDefaults.standard.string(forKey: "uid") else { return }
guard let accessToken = UserDefaults.standard.string(forKey: "accToken") else { return }
guard let projectid = UserDefaults.standard.string(forKey: "propSurID") else { return }
let params = ["user_id": uid, "access_token": accessToken,"project_surveyors_id": projectid,"cores_id": self.coreid]
print(params)
showHud(view: self.view, message: "Please Wait")
AF.request(previousinspectionlist, method: .post, parameters: params).responseJSON(completionHandler: {(response) in
switch response.result{
case.success(let value):
let json = JSON(value)
print(json)
let data = json["data"]
if data == []{
}else{
self.historyData.removeAll()
for cat in data{
let fk_user_id = cat.1["fk_user_id"].stringValue
let name = cat.1["name"].stringValue
let signature = cat.1["signature"].stringValue
let fk_cores_id = cat.1["fk_cores_id"].stringValue
let inspections_id = cat.1["inspections_id"].stringValue
let fk_project_surveyors_id = cat.1["fk_project_surveyors_id"].stringValue
let created_date = cat.1["created_date"].stringValue
let number = cat.1["number"].stringValue
let survey_date = cat.1["survey_date"].stringValue
var arrOfItems = [SubCoreModelData]()
for ser in cat.1["sub_cores"] {
let subcore = SubCoreModelData(sub_core_title: ser.1["sub_cores_title"].stringValue)
arrOfItems.append(subcore)
}
self.historyData.append(HistoryModel(fk_user_id: fk_user_id, signature: signature, fk_cores_id: fk_cores_id, name: name, inspections_id: inspections_id, fk_project_surveyors_id: fk_project_surveyors_id, created_date: created_date, number: number, survey_date: survey_date, sub_cores: arrOfItems, collapsed: false))
}
}
self.tblListView.reloadData()
dismissHud()
case.failure(let error):
basicErrorAlertWith(title: "Error", message: error.localizedDescription, controller: self)
dismissHud()
}
})
}
但是使用这段代码,我在 tableview 中得到了重复的数据,所以任何人都可以告诉我如何为具有 Sub Core 标题的每一行设置标签,请帮我解决这个问题
TableviewDelegate和DataSource代码
func numberOfSections(in tableView: UITableView) -> Int {
return self.historyData.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let items = self.historyData[section].sub_cores
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! InspectionHistoryTableViewCell
cell.lblName.text = historyData[indexPath.row].name
if let number = historyData[indexPath.row].number{
print(number)
cell.lblNumber.text = "#\(number)"
}
cell.lblSurveydate.text = historyData[indexPath.row].survey_date
let items = self.historyData[indexPath.section].sub_cores
let item = items[indexPath.row]
if let subcore = item.sub_core_title{
cell.tagList.addTag(subcore)
}
cell.selectionStyle = .none
return cell
}
您似乎混淆了数据模型。
看起来 historyData
中的每个条目都有一个部分,而历史数据中的每个 sub_cores
都需要一行。
但您真正想要的只是一个部分,有 historyData.count
行。
在cellForRowAt:
中,您正在访问具有行索引和节索引的历史数据数组,这将导致数据混合并且极有可能很快崩溃。
因此,要更正您的 cellForRowAt:
,您只需访问每行索引的历史数据,然后用所有 sub_cores.
清除并填充标签视图
这应该有效:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.historyData.count
}
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! InspectionHistoryTableViewCell
let row = indexPath.row
let data = historyData[row]
cell.lblName.text = data.name
if let number = data.number{
print(number)
cell.lblNumber.text = "#\(number)"
}
cell.lblSurveydate.text = data.survey_date
let items = data.sub_cores
cell.tagList.removeAllTags()
for (item in items) {
cell.tagList.addTag(item.sub_core_title)
}
cell.selectionStyle = .none
return cell
}
我正在使用 Swift
创建应用程序,我想在 UITableViewCell
中显示一些标签 JSON 解析这里是我想在我的应用程序中做的屏幕截图
Here is the screen shot i want to do like this
如您在屏幕截图 Flat1 中所见,Flat2 是我想在 UITableVieCell 中显示的标签,用于显示我在下面使用的标签
This is the TagListView Which i have used
这是我的 JSON 来自 WebService
的数据{
"success": "1",
"data": [
{
"fk_project_surveyors_id": "1",
"number": 1,
"created_date": "2020-04-17 10:09:57",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_sFZuFpUd011587136197.png",
"name": "Sean Clancy",
"inspections_id": "4",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 2,
"created_date": "2020-04-29 12:55:45",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
},
{
"sub_cores_title": "Flat 2"
}
],
"signature": "img_Ptw0bvSGfR1588182945.png",
"name": "Sean Clancy",
"inspections_id": "6",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 3,
"created_date": "2020-05-06 06:08:11",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_FSUTzxT4221588763291.png",
"name": "Sean Clancy",
"inspections_id": "7",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 4,
"created_date": "2020-06-15 04:25:16",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_EVqcz58zN11592213116.png",
"name": "Sean Clancy",
"inspections_id": "8",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 5,
"created_date": "2020-06-21 11:04:56",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_3ySNyhAjYd1592755496.png",
"name": "ron",
"inspections_id": "10",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
},
{
"fk_project_surveyors_id": "1",
"number": 6,
"created_date": "2020-06-21 11:05:44",
"sub_cores": [
{
"sub_cores_title": "Flat 1"
}
],
"signature": "img_ILSykgAIW71592755544.png",
"name": "ron2",
"inspections_id": "11",
"fk_user_id": "1",
"fk_cores_id": "12",
"survey_date": "2020-04-12"
}
],
"message": ""
}
如您在 JSON 数据中所见,每个项目都有 sub_cores 数组,从那个 sub_cores_title
我想显示在 TagListView
里面,它在 UITableViewCell
里面
这是我在上面解析过的模型结构JSON
public struct HistoryModel{
var fk_user_id: String?
var signature: String?
var fk_cores_id: String?
var name: String?
var inspections_id: String?
var fk_project_surveyors_id: String?
var created_date: String?
var number: String?
var survey_date: String?
var sub_cores: [SubCoreModelData]
public init(fk_user_id: String,signature: String,fk_cores_id: String,name: String,inspections_id: String,fk_project_surveyors_id: String,created_date: String,number: String,survey_date: String,sub_cores:[SubCoreModelData]) {
self.fk_user_id = fk_user_id
self.signature = signature
self.fk_cores_id = fk_cores_id
self.name = name
self.inspections_id = inspections_id
self.fk_project_surveyors_id = fk_project_surveyors_id
self.created_date = created_date
self.number = number
self.survey_date = survey_date
self.sub_cores = sub_cores
}
}
public struct SubCoreModelData{
var sub_core_title: String?
public init(sub_core_title: String?) {
self.sub_core_title = sub_core_title
}
}
这是我的代码API调用函数,我从中将数据存储到数组
var historyData = HistoryModel
func historyAPI(){
guard let uid = UserDefaults.standard.string(forKey: "uid") else { return }
guard let accessToken = UserDefaults.standard.string(forKey: "accToken") else { return }
guard let projectid = UserDefaults.standard.string(forKey: "propSurID") else { return }
let params = ["user_id": uid, "access_token": accessToken,"project_surveyors_id": projectid,"cores_id": self.coreid]
print(params)
showHud(view: self.view, message: "Please Wait")
AF.request(previousinspectionlist, method: .post, parameters: params).responseJSON(completionHandler: {(response) in
switch response.result{
case.success(let value):
let json = JSON(value)
print(json)
let data = json["data"]
if data == []{
}else{
self.historyData.removeAll()
for cat in data{
let fk_user_id = cat.1["fk_user_id"].stringValue
let name = cat.1["name"].stringValue
let signature = cat.1["signature"].stringValue
let fk_cores_id = cat.1["fk_cores_id"].stringValue
let inspections_id = cat.1["inspections_id"].stringValue
let fk_project_surveyors_id = cat.1["fk_project_surveyors_id"].stringValue
let created_date = cat.1["created_date"].stringValue
let number = cat.1["number"].stringValue
let survey_date = cat.1["survey_date"].stringValue
var arrOfItems = [SubCoreModelData]()
for ser in cat.1["sub_cores"] {
let subcore = SubCoreModelData(sub_core_title: ser.1["sub_cores_title"].stringValue)
arrOfItems.append(subcore)
}
self.historyData.append(HistoryModel(fk_user_id: fk_user_id, signature: signature, fk_cores_id: fk_cores_id, name: name, inspections_id: inspections_id, fk_project_surveyors_id: fk_project_surveyors_id, created_date: created_date, number: number, survey_date: survey_date, sub_cores: arrOfItems, collapsed: false))
}
}
self.tblListView.reloadData()
dismissHud()
case.failure(let error):
basicErrorAlertWith(title: "Error", message: error.localizedDescription, controller: self)
dismissHud()
}
})
}
但是使用这段代码,我在 tableview 中得到了重复的数据,所以任何人都可以告诉我如何为具有 Sub Core 标题的每一行设置标签,请帮我解决这个问题
TableviewDelegate和DataSource代码
func numberOfSections(in tableView: UITableView) -> Int {
return self.historyData.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let items = self.historyData[section].sub_cores
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! InspectionHistoryTableViewCell
cell.lblName.text = historyData[indexPath.row].name
if let number = historyData[indexPath.row].number{
print(number)
cell.lblNumber.text = "#\(number)"
}
cell.lblSurveydate.text = historyData[indexPath.row].survey_date
let items = self.historyData[indexPath.section].sub_cores
let item = items[indexPath.row]
if let subcore = item.sub_core_title{
cell.tagList.addTag(subcore)
}
cell.selectionStyle = .none
return cell
}
您似乎混淆了数据模型。
看起来 historyData
中的每个条目都有一个部分,而历史数据中的每个 sub_cores
都需要一行。
但您真正想要的只是一个部分,有 historyData.count
行。
在cellForRowAt:
中,您正在访问具有行索引和节索引的历史数据数组,这将导致数据混合并且极有可能很快崩溃。
因此,要更正您的 cellForRowAt:
,您只需访问每行索引的历史数据,然后用所有 sub_cores.
这应该有效:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.historyData.count
}
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! InspectionHistoryTableViewCell
let row = indexPath.row
let data = historyData[row]
cell.lblName.text = data.name
if let number = data.number{
print(number)
cell.lblNumber.text = "#\(number)"
}
cell.lblSurveydate.text = data.survey_date
let items = data.sub_cores
cell.tagList.removeAllTags()
for (item in items) {
cell.tagList.addTag(item.sub_core_title)
}
cell.selectionStyle = .none
return cell
}