2014-09-21 28 views
4

我有一個關於uitableview.i的問題,在uitableview中有一個水果列表,在右側導航欄中有一個過濾器按鈕。點擊過濾按鈕時我們如何排序水果清單。我應該怎麼做filterList函數。下面是code.please看看它。我們如何在swift語言中對可用視圖數據進行排序(升序和降序)

/* 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 
    } 
    } 
} 
+0

我已經添加代碼格式化,但請考慮格式化您的代碼更具可讀性的格式 – 2014-09-21 14:15:23

+1

可能重複的[Swift如何通過屬性值對自定義對象數組排序](http://stackoverflow.com/questions/24130026/swift-how-to-sort-array-定製對象的按屬性值) – 2014-09-21 18:43:17

回答

17

嗯,就像它的聲音 - 你會過濾列表:

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

如果你只是想扭轉的項目,而不是真正對它們進行排序(切換順序),你可以執行一個fruitArr.reverse()而不是排序。

+0

謝謝本傑明,它的工作正常....和編碼格式,我會記得之前後。 – Viju 2014-09-21 14:26:58

+0

我們如何在fruitName上應用切換排序? – Viju 2014-09-21 15:19:10

+0

當然,繼續嘗試:) – 2014-09-21 15:47:32

0

斯威夫特3+

可以使用.sorted().lowercased()(用繩子屬性)來排序A-Z,默認情況下.sorted和A-Z的.sort排序。

//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()

0

我使用添加和排序元素到數組的最簡單方法是將它們的指數在0添加:

fruitArr.insert(fruits1, at: 0) 
fruitArr.insert(fruits2, at: 0) 
fruitArr.insert(fruits3, at: 0) 
fruitArr.insert(fruits4, at: 0) 
相關問題