Comment alimenter une table View à partir d'un array ?

bonjour
Je souhaiterais alimenter une tableView à partir des informations mises dans un tableau ce qui donnerait un code plus élégant que ce que j’ai fait (à partir de la 1ère partie du cours de Maxime).
Je pense qu’une belle boucle ferait l’affaire, mais je bloque dessus… ou un switch case…

Actuellement, je remplis à la main, ce qui fonctionne bien et qui donne ceci (j’ai coupé, normalement il y a 16 cellules) :

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "liste-cell", for : indexPath)
    
    if let titleLabel = cell.textLabel {
        
        if indexPath.row == 0 {
            titleLabel.text = "mot 1"
        } else if indexPath.row == 1 {
            titleLabel.text = "mot 2"
        } else if indexPath.row == 2 {
            titleLabel.text = "mot 3"
        } else if indexPath.row == 3 {
            titleLabel.text = "mot 4"
        } else if indexPath.row == 4 {
            titleLabel.text = "mot 5"
        } 
        
    }
        
    return cell
    }

Je souhaiterais une piste, du pseudo code ou une vidéo du cours qui pourrait m’aider ?
merci

Bonjour Fanfan,
Juste pour être sûr d’avoir bien compris, tu as une tableView dont la source serait un tableau…
Si c’est le cas, rien de plus simple : 1/ tu dois dire à ta tableView combien il y d’éléments dans ta liste. Il y a une fonction dite “requiered” qui te permet de faire ça (cf la doc)
2 / Dans ta fonction “cellForRowAt indexPath”, tu crées ta cellule comme tu l’as fait. Si j’ai bien compris le fonctionnement de cette fonction, elle permet de parcourir ta liste sans implémenter une boucle, du coup tu crée une variable (moi c’est comme ça que je procède) qui récupere l’élément de ta liste qui correspondra à l’index de la cellule (l’index 1 de ta liste correspondra à la 2éme cellule et ainsi de suite). Pour ça faut utilisé la variable que tu as en paramètre de cette fonction : “indexPath” suivi de “.row”, ce qui donne un truc du genre “maListeDeMots[indexPath.row]”. 3 / Il ne te reste plus qu’a attribuer cette variable à ton lablel de ta cellule… ici “titleLabel”.
Si je n’ai pas été clair dis moi.
Si j’ai dis une bétise, les gars corrigez moi
Si tu souhaites un exemple de code, je peux t’en fournir un.
En tout cas, dans tout ce que j’entreprends, la tableView est omni présente, donc comprendre son fonctionnement, je pense te sera très utile…

let tableData = ["Un","Deux","Trois"]

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int 
{    
  return self.tableData.count;
}

func tableView(tableView: UITableView!,
        cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{   
    let cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Default, reuseIdentifier:"cell")      
    cell.textLabel?.text = tableData[indexPath.row]
                
    return cell 
}

Perso j’utilise ça :

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell-name", for: indexPath)
        cell.textLabel?.text = arrayData[indexPath.row]

        }
        return cell
    }

En effet, il vaut mieux recycler les cellules précédentes mais comme la question à la base etait sur l’alimentation de la tableView depuis un tableau, j’ai fait au plus vite…

Merci à tous pour votre aide.
J’ai maintenant un code qui fonctionne parfaitement.

J’ai modifié pour éviter le ? avec un if let ; et retiré le "self"
Ca me donne ça :

let listes = [“mot 1”, “mot 2”, “mot 3”]

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return listes.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "liste-cell", for: indexPath)
    if let cell = cell.textLabel {
    cell.text = listes[indexPath.row]
    }
return cell

}

1 « J'aime »