【发布时间】:2022-02-10 00:41:04
【问题描述】:
如何将特定单元格显示在 tableView 顶部? , 例如我有 10 个单元格,其中 5 个为红色,另外 5 个为绿色,我想显示前 5 个单元格,顶部为绿色,另外 5 个单元格下方为红色?
我没有找到任何资源,所以我决定向亲爱的 SO 社区寻求建议。
代码:
extension MonitorimiViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listOfVechicle.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "monitorimiCell", for: indexPath) as? MyCustomCell1 else {return UITableViewCell()}
let currentVechicle = listOfVechicle[indexPath.row]
cell.veturaOutlet.text = currentVechicle.Plate
cell.shpejtsiaAktualeOutlet.text = currentVechicle.Speed!
cell.perditsuarOutlet.text = "\(currentVechicle.LastCommunicationDate!.convertToDisplayForm())"
cell.pasagjereOutlet.text = "\(currentVechicle.Passengers!) Person/a"
cell.vozitesiOutlet.text = "\(currentVechicle.Driver!)"
switch currentVechicle.Status {
case 1:
cell.colorsImageView.backgroundColor = .green
case 2:
cell.colorsImageView.backgroundColor = .red
case 3:
cell.colorsImageView.backgroundColor = .black
case 4:
cell.colorsImageView.backgroundColor = .orange
default: break
}
return cell
所以从currentVechicle.Status 开始,我需要先显示案例 1,然后再显示其余部分。
我的数据结构来自 API:
struct Vehicles: Codable {
var IDVehicle: Int?
var Title: String?
var RegistrationDate: String?
var ExpireDate: String?
var Department: String?
var Identification: String?
var Speed: String?
var Latitude: Double?
var Longitude: Double?
var Angle: Int?
var Status: Int?
var InputValue: Int?
var Plate: String?
var LastCommunicationDate: String?
var Passengers: Int?
var Driver: String?
}
来自api的json形式的数据:
{
"IDVehicle": 0,
"Title": "Truck",
"RegistrationDate": "2017-10-26T17:23:20.677",
"ExpireDate": "2022-10-28T00:00:00",
"Department": "Transport",
"Identification": "863286023094252",
"Speed": "0",
"Latitude": 80.8769778,
"Longitude": 70.9877813,
"Angle": 265,
"Status": 1, // I want the cells sorted based on the Status, If status 1 show cells with 1 on top etc.
"InputValue": 0,
"Plate": "09 09 KO",
"LastCommunicationDate": "2021-10-28T13:53:23",
"Passengers": 0,
"Driver": "Empty"
}
【问题讨论】:
-
您可以相应地更新数据,也可以在
cellForRow方法中做一些事情。这是一个很好的提示,你可以从这里弄清楚。 -
@Rob 感谢您的回复! ,我对 swift 有点陌生,真的不知道这可能需要几天的时间:(,但我会更新代码,如果有人能做点什么来帮助:)
-
在重新加载数据之前对您的 listOfVechicle 集合进行排序
-
使用
sort()将您想要的带有status的车辆放在其他车辆之前。这就是逻辑。您对数据(源)进行排序,而不是“单元格”。 -
@Larme 嘿,谢谢你回答我的菜鸟问题,但根据我的经验,我还没有使用过 sort(),它看起来有点棘手,数组和 $0 但如果我可以的话,我会试着弄清楚: )。