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
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!
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
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
}