gpt4 book ai didi

ios - Swift - 如何根据属性重新排序tableview中的所有单元格?

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

我有一个带有单元格的 tableView。还有 items 类型是 Dialog。这是 cellForRow At 函数:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


let cell = tableView.dequeueReusableCell(withIdentifier: "DialogCell", for: indexPath) as! DialogCell

var item: Dialog

item = items[indexPath.row]

......

return cell
}

现在,我想做的是用 item.getLastMessageCreateAt() 的编号对这些单元格进行排序,它返回一个 Int 数字。我该怎么办?

到目前为止,这是我已经尝试过的:

func getAllCells() -> [UITableViewCell] {

var cells = [UITableViewCell]()
for i in 0...tableView.numberOfSections-1
{
for j in 0...tableView.numberOfRows(inSection: i)-1
{
if let cell = tableView.cellForRow(at: NSIndexPath(row: j, section: i) as IndexPath) {

cells.append(cell)
}

}
}
return cells
}

func reorderCells() {

var lastMessageAgoArray = [Int]()
for item in self.items {
lastMessageAgoArray.append(item.getLastMessageCreateAt())
}
let timeAgoInNumArrayBigToSmall: [Int] = lastMessageAgoArray.sorted { $0 > $1 }

let cells = self.getAllCells()

for cell in cells {
let row = self.tableView.indexPath(for: cell)?.row
if ( lastMessageAgoArray[row!] != timeAgoInNumArrayBigToSmall[row!] ) {
if let index = timeAgoInNumArrayBigToSmall.index(of: lastMessageAgoArray[row!]) {
self.tableView.moveRow(at: IndexPath(row: row!, section: 0), to: IndexPath(row: index, section: 0))
}
self.tableView.reloadData()
}
}

}

我已经尝试运行它,但是我在这一行的末尾得到了nil:

let row = self.tableView.indexPath(for: cell)?.row

那么我应该怎么做才能订购这些细胞呢?

非常感谢!

最佳答案

将项目设置为:

items = myItemList.sorted { $0.getLastMessageCreateAt() > $1.getLastMessageCreateAt() } 

并且你可以保持 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中的代码相同,并删除 getAllCells() 以及 reorderCells().

您不想对单元格本身进行排序,因为它们会根据当前在屏幕上可见的单元格被 TableView 重复使用。

关于ios - Swift - 如何根据属性重新排序tableview中的所有单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464575/

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