我有一个包含API数据的表格视图。 每个单元格都有几个属性。我想要的是按照所选按钮(这三个矩形)对细胞进行排序。
我不知道我该怎么做。我想我需要树方法,每个方法都用于点击按钮。但是如何处理数据的排序和重新加载? 谢谢你的回答。
override func viewDidLoad() {
super.viewDidLoad()
callAlamo(url: urlAPI)
}
func callAlamo(url: String){
Alamofire.request(url).responseJSON(completionHandler: {
response in
self.parseData(JSONData: response.data!)
})
}
func parseData(JSONData: Data){
do{
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
// print(readableJSON)
if let rows = readableJSON["rows"] as? [JSONStandard]{
print(rows)
for i in 0..<rows.count{
let row = rows[i]
if let name = row["name"] as? String{
if name.isEmpty == false{
if let status = row["status"] as? String{
if let counter = row["counter"] as? String{
items.append(Station.init(place: name, counter: counter, status: status))
DispatchQueue.main.async {
self.tableView.reloadData()
}
}else{
let counter = "no data"
items.append(Station.init(place: name, stationsCount: counter, status: status))
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
}
}
}
}catch{
print(error)
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! Cell
cell.place.text = items[indexPath.row].place
cell.stationsCount.text = items[indexPath.row].stationsCount
let num = items[indexPath.row].status
let value = picDictionary[num!]
print(num!, value!)
cell.statusSign.image = UIImage(named: value!)
return cell
}
有时我会从API中获取null值,然后,我将值赋予字符串&#34;没有数据&#34;。
if let counter = row["counter"] as? String{
/////code
else{
let counter = "no data"
//////
}
我不想让这些价值观参与分拣过程,因为它们不是数字。怎么做?
答案 0 :(得分:1)
对三个按钮执行三个操作,然后使用它对数组进行排序,然后重新加载表。
@IBAction func sortWithName(_ sender: UIButton) {
items.sort { $0.place < $1.place }
self.tableView.reloadData()
}
@IBAction func sortWithStatus(_ sender: UIButton) {
items.sort { $0.status < $1.status }
self.tableView.reloadData()
}
@IBAction func sortWithStatusCount(_ sender: UIButton) {
//stationsCount is looks like number so sort it using compare with numeric option
items.sort { $0.stationsCount.compare($1.stationsCount, options: .numeric) == .orderedAscending }
self.tableView.reloadData()
}
编辑:声明另一个名为allItems
的数组,与声明项目数组的方式相同。还有一件事我没有注意到你首先在for循环中重新加载tableView
以便它将重新加载n(o)
次而不是你需要在for循环之后重新加载它一次,然后重新加载{ {1}}并将tableView
与您的商品一起设置,如果您可以将其合并一次,那么您制作的商品数量太多了。
allItems
现在更改所有按钮操作。
为您的三个按钮执行三个操作并使用它对数组进行排序,然后重新加载表。
for row in rows {
if let name = row["name"] as? String,
let status = row["status"] as? String,
!name.isEmpty {
if let counter = row["counter"] as? String {
items.append(Station.init(place: name, counter: counter, status: status))
}else{
let counter = "no data"
items.append(Station.init(place: name, stationsCount: counter, status: status))
}
}
}
//Set allItems with items
self.allItems = items
DispatchQueue.main.async {
self.tableView.reloadData()
}