2016-03-28 14 views
0

Ich habe eine Tabellenansicht, die die JSON-Daten von einer URL dpslayt. Alles funktioniert gut. Was ich brauche ist? In meiner Tabellenansicht habe ich ein Label namens "name label". Das wird den Namen in meiner Tabellenansicht anzeigen.Wie man A - z in der Tabellenansicht sortiert swift 2.0

Und ich habe eine Menüoption mit einer Schaltfläche namens "sort Daten A - z" .Wenn ich darauf klicken, sollten meine Tabellenansicht Daten mit der Sortierung des Datums aus A-z Alphabete Reihenfolge (My Name Titel) neu laden.

Dies ist meine Schaltfläche Aktion:

@IBAction func sortByAZBtnPress(sender: AnyObject) { 
    } 

Mein 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) { 
    } 



} 

Bitte helfen Sie mir. Ich bin nicht immer klare Vorstellung, das zu tun ... Danke

Aktualisiert:

(
     { 
     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 =; 
     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 =65; 
     rating = "2.0"; 
    }, 

) 

Antwort

1

Unter der Annahme, dass das Array ein Array von Wörterbüchern und Ihr Wörterbuch ist, hat einen „Namen“ -Taste können Sie dies tun können. Ändern Sie den Code, wenn Ihr Diktat andere Schlüssel enthält, die den Namen enthalten.

@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() 
} 

Für die Bestellung nach Bewertung (hoch zu niedrig) können Sie dies verwenden.

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

Ich bekomme Fehler, dass 'Wert des Typs 'NSMutableArray' hat kein Mitglied 'sortInPlace' ' – user5513630

+0

großartig! ... funktioniert klar. Ich habe noch einen Zweifel. Wie weise habe ich einige JSON-Daten namens "Bewertung", "Datum der Post" .In meiner Tabelle auch Bewertung, Datum des Post-Datum wird angezeigt.Ich habe auch nach Bewertung sortieren, sortieren nach Datum. Wie kann ich dafür auch tun. Ich habe auch 2 Knopfaktion für sortiere nach Bewertung, sortiere nach dateofpost ... wenn du sagst, dass das sehr hilfreich sein wird. Ich bin mit mehr als 2 Stunden geschlagen. Aber du bist erstaunt !!! – user5513630

+0

Ich habe die gleiche Logik verwendet, aber es funktioniert nicht 'arrDict.sortUsingComparator {(dict1, dict2) -> NSComparisonResult in wenn let name1 = dict1 [" rating "] als? String, Name2 = dict2 ["Bewertung"] als? String { return name1.compare (name2) } return .OrderedAscending } self.tableView.reloadData() ' – user5513630

1

Zum Sortieren der tableview sollten Sie youre dataSource sortieren zunächst und als nachladen tableview.

In du bist Fall:

Zunächst sortieren nach A bis Z:

arrDict

Für die Verwendung der funktionalen Programmierung Sortierung:

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

Zweitens nachladen Tableview von:

self.tableView.reloadData()

+0

nachladen die Tableview ist in Ordnung, aber ich bin nicht sicher, wie durch Daten zu sortieren ?? – user5513630

+0

zeigen Sie Ihre Datenquelle –

+0

Datenquelle ???/.... – user5513630

0

Art arrDict unter Code dann self.tableView.reloadData():

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

'erwartete Ausdruck in Container Literal'..Es erlaubt mir, zusätzliche Kommas hinzuzufügen – user5513630

Verwandte Themen