gpt4 book ai didi

ios - 如何在 uitableview 的 cellForRowAt 函数中按标题日期对响应进行排序

转载 作者:行者123 更新时间:2023-11-30 11:18:33 25 4
gpt4 key购买 nike

我目前有来自 json 的 json 响应这是一个 [NSDictionary]。这显示在表格 View 中,我能够将排序的日期设置到标题中,但是我在 cellForRowAt 函数中设置 uilabel 时遇到困难。我想要显示的表格 View 有一个排序日期的标题标题(我已经有了),该部分下方是与标题具有相同日期的名称。我在下面提供了这方面的代码。感谢您的帮助和建议。

import UIKit
import Alamofire

class JSONTableViewController: UITableViewController

{

var responseValue:[NSDictionary] = []
var sortedResponsevalue:[NSDictionary] = []
var sectionHeaderArray:[String] = []
var rowTitle:[String] = []

override func viewDidLoad() {
super.viewDidLoad()
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
for response in self.responseValue {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let responseDate = response.object(forKey: "date") as! String
let date = dateFormatter.date(from: responseDate)
print(date!.toString(dateFormat: "MMM d, yyyy"))
self.sectionHeaderArray.append(date!.toString(dateFormat: "MMM d, yyyy"))
self.rowTitle.append(response.object(forKey: "name") as! String)
}
print(self.sectionHeaderArray.count)
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.sectionHeaderArray[section]
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return self.sectionHeaderArray.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.sectionHeaderArray[section].count
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "jsonCell", for: indexPath) as! JSONTableViewCell

if let nameString = self.responseValue[indexPath.row].object(forKey: "name") as? String {
cell.jsonLabel.text = nameString

}


return cell
}
}

最佳答案

我从您的问题中了解到的是:您在 cellForRow 方法中获得了与“nameString”相同的标题。

问题是

if let nameString = self.responseValue[indexPath.row].object(forKey: "name") as? String {
cell.jsonLabel.text = nameString
}

您正在传递节数self.sectionHeaderArray.count。由于总部分 = 100 并且每个部分只有 1 行,因此标题将始终保持不变。

尝试一下:使用indexPath.section而不是indexPath.row来获取不同的标题

if let nameString = self.responseValue[indexPath.section].object(forKey: "name") as? String {
cell.jsonLabel.text = nameString
}

编辑

class JSONTableViewController: UITableViewController
{
var responseValue:[NSDictionary] = []
var sortedResponsevalue:[NSDictionary] = []
var sectionHeaderArray = [[String: Any]]()

override func viewDidLoad() {
super.viewDidLoad()

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var currentDate: String? = nil
var nameArray = [String]()
for (index,response) in self.responseValue.enumerated() {
let responseDate = response.object(forKey: "date") as! String
let date = dateFormatter.date(from: responseDate)
let dateString = date!.toString(dateFormat: "MMM d, yyyy")
let nameString = response.object(forKey: "name") as! String
if currentDate == nil {
// FIRST TIME
currentDate = dateString
nameArray.append(nameString)

} else {
// CHECK IF DATES EQUAL, THEN KEEP ADDING
if currentDate == dateString {
nameArray.append(nameString)
if index == self.responseValue.count - 1 {
let dictToAppend: [String : Any] = ["date": currentDate!, "names": nameArray]
self.sectionHeaderArray.append(dictToAppend)
}
} else {
let dictToAppend: [String : Any] = ["date": currentDate!, "names": nameArray]
self.sectionHeaderArray.append(dictToAppend)
currentDate = dateString
nameArray.removeAll()
nameArray.append(nameString)
}
}
}

}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let dictInfo = self.sectionHeaderArray[section]
let dateString = dictInfo["date"]
return dateString as? String
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return self.sectionHeaderArray.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let dictInfo = self.sectionHeaderArray[section]
let namesArray = dictInfo["names"] as! [String]

return namesArray.count
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "jsonCell", for: indexPath) as! JSONTableViewCell

let dictInfo = self.sectionHeaderArray[indexPath.section]
let namesArray = dictInfo["names"] as! [String]
let nameString = namesArray[indexPath.row]
cell.jsonLabel.text = nameString

return cell
}
}

尝试并分享结果。

关于ios - 如何在 uitableview 的 cellForRowAt 函数中按标题日期对响应进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539723/

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