簡體   English   中英

如何在表視圖Swift 2.0中對A-z進行排序

[英]How to sort A - z in table view swift 2.0

我有一個表視圖,它將從一個URL浸入json數據。 我需要的是? 在我的表格視圖中,我有一個名為“名稱標簽”的標簽。它將在我的表格視圖中顯示名稱。

我有一個菜單選項,其中一個按鈕名為“排序數據A-z”。單擊該按鈕時,我的表格視圖數據應重新加載,並按字母順序排列日期(“我的名字”)。

這是我的按鈕動作:

@IBAction func sortByAZBtnPress(sender: AnyObject) {
    }

我的viewcontroller.swift

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var RightMenu: UIView!



    @IBOutlet weak var tableView: UITableView!   // UITable view declaration

    @IBOutlet weak var Resultcount: UILabel!     // count label

    var arrDict :NSMutableArray=[]   // array to store the value from json


    let cellSpacingHeight: CGFloat = 5  // cell spacing from each cell in table view


    override func viewDidLoad() {


        super.viewDidLoad()


        self.jsonParsingFromURL()  // call the json method

        let nib = UINib(nibName:"customCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "cell")


        RightMenu.layer.borderWidth = 1



    }

    // web services method
    func jsonParsingFromURL () {
        let url = NSURL(string: "http://sampleUrl.com”)
        let session = NSURLSession.sharedSession()

        let request = NSURLRequest(URL: url!)
        let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
            // print("done, error: \(error)")

            if error == nil
            {

                dispatch_async(dispatch_get_main_queue()){
                    self.arrDict=(try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! NSMutableArray

                    //print(self.arrDict)

                    if (self.arrDict.count>0)
                    {
                        self.Resultcount.text = "\(self.arrDict.count) Results"
                        self.tableView.reloadData()
                    }}

                // arrDict.addObject((dict.valueForKey("xxxx")
            }


        }
        dataTask.resume()


    }




    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.arrDict.count
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }





    // calling each cell based on tap and users ( premium / non premium )
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


        let cell:customCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! customCell 


        cell.vendorName.text=arrDict[indexPath.section] .valueForKey("name") as? String 
        cell.vendorAddress.text=arrDict[indexPath.section] .valueForKey("address") as? String

        return cell 
    }


    // MARK:
    // MARK: Sort Method

    @IBAction func sortByRevBtnPress(sender: AnyObject) {

        self.indicator.startAnimating()
         self.indicator.hidden = false
         RightMenu.hidden = true

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue()){
            self.indicator.stopAnimating()
            self.indicator.hidden = true


        };
        self.tableView.reloadData()


    }


    @IBAction func sortByAZBtnPress(sender: AnyObject) {
    }



}

請幫幫我。 我不清楚要這樣做...謝謝

更新 :

(
        {
        ad = 0;
        address = "900 York Mills Rd, Toronto, ON M3B 3H2, Canada";
        "category_id" = 1;

        latitude = "43.7563";
        longitude = "-79.3495";
        name = "Honeybee Restaurant";
        phone = 9876543210;
        rating = "5.0";
    },
        {
        ad = 1;
        address = "1677 Wilson Ave, Toronto, ON M3L 1A5, Canada";
        "category_id" = 1;

        latitude = "43.7194";
        longitude = "-79.5153";
        name = "Maki My Way";
        phone = 9875463254;
        rating = "4.0";
    },
        {
        ad = 1;
        address = "75 Bremner Blvd, Toronto, ON M5J 0A1, Canada";
        "category_id" = 1;

        latitude = "43.6429";
        longitude = "-79.3814";
        name = "Blow Fish Restaurant";
        phone = 9873245610;
        rating = "5.0";
    },
        {
        ad = 0;
        address = "4150 Yonge St, Toronto, ON M2P 2C6, Canada";
        "category_id" = 1;

        latitude = "43.747";
        longitude = "-79.4079";
        name = "SaigonFlower Restaurant";
        phone = 7892345621;
        rating = "3.0";
    },
        {
        ad = 1;
        address = "604 King St W, Toronto, ON M5V 1M6, Canada";
        "category_id" = 1;

        latitude = "43.6445";
        longitude = "-79.4004";
        name = "Sushi Gen";
        phone = 7456321065;
        rating = "2.0";
    },

)

為了對tableview進行排序,您應該首先對dataSource排序,然后重新加載tableview

在這種情況下:

首先按A到z排序:

arrDict

對於排序,請使用函數式編程:

arrDict = arrDict.sort({ $0.name > $1.name })

其次,通過以下方式重新加載tableview:

self.tableView.reloadData()

假設您的數組是字典的數組,並且您的字典具有“名稱”鍵,則可以執行此操作。 如果您的字典具有包含名稱的其他鍵,請更改代碼。

@IBAction func sortByAZBtnPress(sender: AnyObject) {
   arrDict.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in
       if let name1 = dict1["name"] as? String, name2 = dict2["name"] as? String {
              return name1.compare(name2)
       }
       return .OrderedAscending
   }
   self.tableView.reloadData()
}

對於按等級排序(從高到低),您可以使用它。

arrDict.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in
    if let name1 = dict1["rating"] as? String, name2 = dict2["rating"] as? String {
        return name2.compare(name1)
    }
    return .OrderedAscending
}

使用以下代碼對arrDict進行排序,然后對self.tableView.reloadData():排序self.tableView.reloadData():

sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM