我有一个带有单元格的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
中的row
:
let row = self.tableView.indexPath(for: cell)?.row
那我应该怎么订购这些电池?
非常感谢您!
答案 0 :(得分:1)
将项目设置为:
items = myItemList.sorted { $0.getLastMessageCreateAt() > $1.getLastMessageCreateAt() }
您可以将func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中的代码保持不变,并删除getAllCells()
和reorderCells()
。
您不想对单元格本身进行排序,因为表格视图会根据屏幕上当前可见的单元格对它们进行重用。