Je veux faire UITabelView simple. J'ai enregistré sa cellule avec ma classe personnalisée nommée backgroundviewcell. Je veux obtenir le libellé de la cellule sélectionnée. J'ai essayé plusieurs fois mais le résultat est nul. J'ai également essayé la solution du débordement de pile mais cela ne fonctionne pas pour moi. Ceci est mon code cellForRowAt indexPath:

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> backgroundViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "soundElementalcell") as! backgroundViewCell


    let imageNames = sections[indexPath.section].images[indexPath.row]

    cell.Labeltittle.text = sections[indexPath.section].items[indexPath.row]
    cell.Labeltittle.textColor = UIColor(hex : 0x90BA27)
    cell.LabelDetail.text = sections[indexPath.section].detail[indexPath.row]
    //cell.detailTextLabel?.textColor = UIColor.red
    //cell.isHighlighted = false

    cell.backgroundColor = UIColor.clear
    cell.iconview.image = UIImage(named: imageNames)

     return cell
}

Voici mon code didSelectRowAt indexPath:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {


    let indexPath = tableView.indexPathForSelectedRow!
    let currentCell = tableView.cellForRow(at: indexPath)!

    celltext = currentCell.textLabel!.text
    performSegue(withIdentifier: "showPlayer", sender: self)
}

Et ma méthode Segue est:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showPlayer" {

        let playerVC = segue.destination as! PlayerViewController
        playerVC.trackName = (celltext)! as String


    }
}
5
Chetan Lodhi 27 janv. 2017 à 08:51

4 réponses

Meilleure réponse

Au lieu d'accéder au texte de la cellule label, vous devez accéder au tableau que vous avez utilisé pour remplir les données de la cellule tableView's.

Vous devez donc utiliser la UITableViewDelegate méthode didSelectRowAtindexPath et accéder au tableau que vous utilisez avec vos méthodes tableView.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print(indexPath.row)
    //Access the array that you have used to fill the tableViewCell
    print(yourArray[indexPath.row])
}

Remarque: Une fois, confirmez que TableView delegate est correctement connecté à votre ViewController afin qu'il appelle la méthode didSelectRowAt lorsque vous sélectionnez la cellule.

Modifier: si vous souhaitez transmettre les données, essayez de cette manière.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     performSegue(withIdentifier: "showPlayer", sender: indexPath) //Pass indexPath as sender instead of self
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showPlayer" {

        let playerVC = segue.destination as! PlayerViewController
        let indexPath = sender as! IndexPath
        playerVC.trackName = sections[indexPath.section].items[indexPath.row]       
    }
}
4
Nirav D 27 janv. 2017 à 06:25

Essayez ce "Swift 4" -

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let currentCellTxt = yourTableView.cellForRow(at: indexPath)! as? YourCustomTableViewCell

    print(currentCellTxt?.lblYourName?.text)   // 'lblYourName' that you defined in your  'YourCustomTableViewCell'

}
1
iDeveloper 26 nov. 2018 à 06:29

Vous n'avez défini aucun texte pour textLabel. Par conséquent, il renvoie une valeur nulle.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> backgroundViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "soundElementalcell") as! backgroundViewCell


    let imageNames = sections[indexPath.section].images[indexPath.row]

    cell.Labeltittle.text = sections[indexPath.section].items[indexPath.row]
    cell.Labeltittle.textColor = UIColor(hex : 0x90BA27)
    cell.LabelDetail.text = sections[indexPath.section].detail[indexPath.row]
    //cell.detailTextLabel?.textColor = UIColor.red
    //cell.isHighlighted = false

    cell.backgroundColor = UIColor.clear
    cell.iconview.image = UIImage(named: imageNames)

     return cell
}

In didSelectRow func try to get value from Labeltittle.text not from textLabel.text

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {


    let indexPath = tableView.indexPathForSelectedRow!
    let currentCell = tableView.cellForRow(at: indexPath)!

    celltext = currentCell.Labeltittle.text
    performSegue(withIdentifier: "showPlayer", sender: self)
}
0
Adrian P 1 mai 2019 à 13:15

Cela fonctionne pour moi:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath) as! YourCellType
    let labelContent = cell.labelToAccess.text
}

La première ligne crée une instance de votre type de cellule (ou cellule standard, pas mon cas).

La seconde sauvegarde le contenu de votre étiquette (labelToAccess dans ce cas) dans une constante.

5
Jorge Sánchez 2 oct. 2017 à 21:29