要按日期对UITableView的sections进行分组,可以按照以下步骤进行操作:
struct Item {
let name: String
let date: Date
}
let items = [
Item(name: "Item 1", date: Date()),
Item(name: "Item 2", date: Date()),
Item(name: "Item 3", date: Date()),
// ...
]
sorted(by:)
方法来实现,其中by
闭包用于比较两个对象的日期。let sortedItems = items.sorted { $0.date < $1.date }
var groupedItems = [Date: [Item]]()
for item in sortedItems {
let date = Calendar.current.startOfDay(for: item.date)
if groupedItems[date] != nil {
groupedItems[date]?.append(item)
} else {
groupedItems[date] = [item]
}
}
let sectionDates = groupedItems.keys.sorted()
// 获取指定section的数据源
func items(for section: Int) -> [Item] {
let date = sectionDates[section]
return groupedItems[date] ?? []
}
你可以在UITableView的数据源方法中使用这些信息来设置sections和rows。
func numberOfSections(in tableView: UITableView) -> Int {
return groupedItems.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let date = sectionDates[section]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.string(from: date)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items(for: section).count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let item = items(for: indexPath.section)[indexPath.row]
cell.textLabel?.text = item.name
return cell
}
以上是按日期对UITableView的sections进行分组的解决方法,你可以根据自己的需求进行调整和扩展。
上一篇:按日期对所有数据分组排序