2016-05-26 4 views
2

Ich begann Swift Programmierung und ich habe ein Problem, dass ich weiß nicht, wie zu lösen.Wie das Array im Wörterbuch angezeigt werden - Swift

Ich habe eine Plist Datei:

 <dict> 
<key>Vegetables</key> 
<array> 
    <string>Pepper</string> 
    <string>Tomato</string> 
    <string>Cucumber</string> 
</array> 
<key>Fruits</key> 
<array> 
    <string>Apple</string> 
    <string>Banana</string> 
    <string>Watermelon</string> 
</array> 
     </dict>  

Jetzt will ich alle Arrays (Obst und Gemüse) zeigen, dass in der Wurzel (Dictionary) in TableView, so dass jedes Array-Name (Key) wird ein separater Abschnitt und jeder String werden eine einzelne Zeile in meinem TableView sein.

Hier ist meine Ansicht Controller-Klasse:

import UIKit 
    //I add TableView methods 

    class ViewController : UIViewController , UITableViewDelegate ,UITableViewDataSource { 

    override func viewDidLoad(){    
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    // return number of section in my case it's two section (fruits and vegetables) 
     return 1; 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // number of row in every section is three 
    // I want to do something like Array.count 
    return 1; 
    } 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let row : UITableViewCell = UITableViewCell(); 
    //Add every Row 
    return row;  
    } 

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

    // Here i want to add header to every section i made; 
    // Header Name = Array (key) Fruit/Vegetables 
    // How i do this ? 
    return ""; 
    } 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     } 
     } 
+1

Zuerst eine Idee bekommen, wie Tableview mit einzelnem Abschnitt von plist Daten .http füllen: //www.ioscreator.com/tutorials/load-data-property-list-ios8-swift Sie dann mehrere Abschnitt Umgang mit minderjährigen haben Änderungen, Wenn Sie fertig sind mit Tableview Population mit einzelnen Abschnitt und fühlen sich schwierig, dann kommen Sie zurück mit etwas Code. Du kannst die Lösung aus der Gemeinschaft herausholen, aber die Schönheit des Lernens ist es, dadurch zu lernen. Du erinnerst dich immer an die Sache, für die du etwas Zeit verbracht hast. –

Antwort

0

schreiben Code unten und Sie Ihre Antwort erhalten wird,

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
{ 
var listDic : NSMutableDictionary = NSMutableDictionary() 
var headerArr : NSMutableArray = NSMutableArray() 

@IBOutlet var tblList : UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.loadData() 
    self.navigationController?.navigationBar.translucent = true 
    self.navigationController?.navigationBar.tintColor = UIColor.grayColor() 

} 

func loadData() 
{ 
    if let path = NSBundle.mainBundle().pathForResource("test", ofType: "plist") // Rename with your plist file name 
    { 
     self.listDic = NSMutableDictionary(contentsOfFile: path)! // NSMutableArray(contentsOfFile: path)! 
    } 

    if(self.listDic.count > 0) 
    { 
     self.headerArr.addObjectsFromArray(self.listDic.allKeys) 
    } 

    self.tblList.reloadData() 
} 

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

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

    let arr = self.listDic.valueForKey(self.headerArr.objectAtIndex(section) as! String) as! NSMutableArray 
    return arr.count 
} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return self.headerArr.objectAtIndex(section) as? String 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = UITableViewCell(style: .Default, reuseIdentifier: "Cell") 

    let arr = self.listDic.valueForKey(self.headerArr.objectAtIndex(indexPath.section) as! String) as! NSMutableArray 

    cell.textLabel?.text = arr.objectAtIndex(indexPath.row) as? String 
    return cell 
} 
} 

auf Ihrem plist-Datei und adaequat Diese basiert.

Hoffe, das wird Ihnen helfen.

+0

Funktioniert super danke !! –

+0

Ja, du bist willkommen :) –

2

Wörterbücher sind nicht gut geeignet, die Datenquelle für Tabellenansichten zu sein, weil sie ungeordnet sind. Ich schlage vor, dass Sie ein äußeres Array erstellen, das Ihre Abschnitte enthält. Fügen Sie für jeden Abschnitt ein Wörterbuch hinzu, das einen Titel und ein Array von Elementen enthält.

Alternativ können Sie einen benutzerdefinierten Abschnitt Struktur erstellen, die einen Titel und einen Artikel Eintrag hat, und eine Reihe von Abschnitt structs erstellen.

+0

Vielen Dank für die Antwort, ich nicht für Sie stimmen kann, weil ich auf der Website neu bin, aber mein Job war es mit einem plist zu machen –

+0

Dann wird Ihr plist Refactoring so der äußere Behälter ein Array, ein Wörterbuch für die jeweils Abschnitt, der wiederum einen Abschnitt Titel und ein Array von Elementen enthält. –

Verwandte Themen