Comment puis-je remplir deux sections dans une vue de table avec deux tableaux différents en utilisant swift?

j'ai deux tableaux Data1 et Data2 et je veux peupler les données à l'intérieur de chacun de ceux-ci (ils contiennent des chaînes) dans une tableview dans deux sections différentes. La première section devrait avoir un titre "certaines données 1" et la deuxième section devrait être intitulée "KickAss".

j'ai les deux sections peuplant avec des données du premier tableau (mais sans en-têtes non plus).

Voici mon code:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var rowCount = 0
        if section == 0 {
            rowCount = Data1.count
        }
        if section == 1 {
            rowCount = Data2.count
        }
        return rowCount
    }
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        let ip = indexPath
        cell.textLabel?.text = Data1[ip.row] as String
        return cell
    }

dans la méthode cellForRowAtIndexPath, est-il possible pour moi d'identifier la section en quelque sorte, comme je l'ai fait dans le numberOfRowsInSection méthode? En outre, Comment puis-je donner des titres à chaque section? Merci

25
demandé sur nhgrif 2015-04-11 17:24:16

3 réponses

vous pouvez déterminer dans quelle section vous êtes en regardant indexPath.section. Pour spécifier les titres, outrepasser la fonction

func tableView(tableView: UITableView!, titleForHeaderInSection section: Int) -> String!
12
répondu Glorfindel 2015-04-11 14:30:51

TableView Cells

Vous pouvez utiliser un tableau multidimensionnel. Par exemple:

let data = [["0,0", "0,1", "0,2"], ["1,0", "1,1", "1,2"]]

Pour le nombre de sections:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return data.count
}

Ensuite, pour spécifier le nombre de lignes dans chaque section utilisation:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data[section].count
}

enfin, vous devez configurer vos cellules:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellText = data[indexPath.section][indexPath.row]

    //  Now do whatever you were going to do with the title.
}

TableView Les En-Têtes

vous pouvez à nouveau utiliser un tableau, mais avec juste une dimension ceci heure:

let headerTitles = ["Some Data 1", "KickAss"]

Maintenant, pour définir les titres des sections:

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    if section < headerTitles.count {
        return headerTitles[section]
    }

    return nil
}

le code ci-dessus vérifie qu'il y a un titre pour cette section et le renvoie, sinon nil est renvoyé. Il n'y aura pas un titre, si le nombre de titres en headerTitles est plus petit que le nombre de tableaux dans data.

Le Résultat

enter image description here

61
répondu ABakerSmith 2015-04-11 14:41:43

Vous pouvez créer un Struct pour conserver les données qui appartiennent à une section, comme alternative à ma réponse précédente. Par exemple:

struct SectionData {
    let title: String
    let data : [String]

    var numberOfItems: Int {
        return data.count
    }

    subscript(index: Int) -> String {
        return data[index]
    }
}

extension SectionData {
    //  Putting a new init method here means we can
    //  keep the original, memberwise initaliser.
    init(title: String, data: String...) {
        self.title = title
        self.data  = data
    }
}

maintenant dans votre contrôleur de vue vous pouvez configurer vos données de section comme ceci:

lazy var mySections: [SectionData] = {
    let section1 = SectionData(title: "Some Data 1", data: "0, 1", "0, 2", "0, 3")
    let section2 = SectionData(title: "KickAss", data: "1, 0", "1, 1", "1, 2")

    return [section1, section2]
}()

En-Têtes De Section

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return mySections.count
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return mySections[section].title
}

par Rapport à ma réponse précédente, vous n'avez pas à vous soucier correspondant au nombre d' headerTitles au nombre de tableaux dans data.

TableView Les cellules

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return mySections[section].numberOfItems
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellTitle = mySections[indexPath.section][indexPath.row]

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
    cell.textLabel?.text = cellTitle

    return cell
}
21
répondu ABakerSmith 2015-04-11 15:03:19