我们如何用swift语言对uitableview数据进行排序(升序和降序)



我有一个关于uitableview的问题。我在uitableview中有一个水果列表,在右侧的导航栏中还有一个过滤按钮。当我们点击过滤器按钮时,如何对水果列表进行排序。我应该在filterList函数中做什么。下面是代码。请看一下。

/* Fruit.swift */
import Foundation
class Fruit {
    var fruitName = ""
    init(fruitName: String) { self.fruitName = fruitName }
}

class FruitsListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet var fruitList: UITableView!
    @IBOutlet var filterItem: UIBarButtonItem!
    var fruitArr:[Fruit] = Fruit
    override func viewDidLoad() {
        super.viewDidLoad()
        var barButton = UIBarButtonItem(title: "Filter", style: .Plain, target: self, action:"filterList") 
        self.navigationItem.rightBarButtonItem = barButton
        var fruits1 = Fruit(fruitName: "Apple" as String) 
        var fruits2 = Fruit(fruitName: "Mango" as String) 
        var fruits3 = Fruit(fruitName: "Banana" as String) 
        var fruits4 = Fruit(fruitName: "Orange" as String)
        fruitArr.append(fruits1)
        fruitArr.append(fruits2) 
        fruitArr.append(fruits3) 
        fruitArr.append(fruits4)
        }
    func filterList() {/* ? */}
    override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated.
     }
        func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {       
         return fruitArr.count
         }
        func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
          let cell:ShowFruitCustomCellTableViewCell = tableView.dequeueReusableCellWithIdentifier('FruitCell') as ShowFruitCustomCellTableViewCell
          let fruit = fruitArr[indexPath.row] cell.setCell(fruit.fruitName) return cell
    }
    }
}

好吧,就像听起来一样——你可以过滤列表:

func filterList() { // should probably be called sort and not filter
    fruitArr.sorted() { $0.fruitName > $1.fruitName } // sort the fruit by name
    fruitList.reloadData(); // notify the table view the data has changed
}

如果您只是想反转项目,而不是对它们进行实际排序(以切换顺序),则可以执行fruitArr.reverse()而不是排序。

Swift 3+

默认情况下,可以使用.sorted().lowercased()(具有字符串属性)对a-z进行排序。sort和.sort按a-z排序。

    //Prints Names A-z (0-9 then A-Z then a-z)
    fruitArr.sorted() { $0.fruitName > $1.fruitName }
    //prints  '000', 'Watermelon', 'apple'
    //Prints Name in alphabetical order.
    fruitArr.sorted() { $0.fruitName.lowercased() > $1.fruitName.lowercased() }
    //prints '000', 'apple', 'Watermelon'

请参阅.sorted()的文档

这就是我使tableView下降而不是上升的方式。我确实使用了一个segue来加载和传递Tableview的数据。

 // pass some data to the tableViewController in descending order
    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.destination is TableViewController
        {
            let vc = segue.destination as? TableViewController
            vc?.passedData   = pointEntryArray.reversed()
            vc?.passedData01 = dataCenterArray.reversed()
        }
    }

hth

这个怎么样:

放置在viewDidLoad或cellForRow中,然后再追加数据。

fruitArr.sort()

使用didSet:非常容易

var fruitArr = [Fruit]() {
   didSet {
      fruitArr = fruitArr.sorted(by: {  $0. fruitName < $1. fruitName })
   }
}

我用来向数组中添加和排序元素的最简单方法是在索引0:处添加它们

fruitArr.insert(fruits1, at: 0)
fruitArr.insert(fruits2, at: 0) 
fruitArr.insert(fruits3, at: 0)
fruitArr.insert(fruits4, at: 0)

最新更新