Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Label text of UITableView Cell using Swift?

I want to make simple UITabelView. I registered it's cell with my custom class which named as backgroundviewcell. I want to get Label of the selected cell. I tried many times but the output is coming nil value. I have also tried solution from stack overflow but it does not work for me. This is my cellForRowAt indexPath code :

 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
}

This is my didSelectRowAt indexPath code :

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

and my Segue Method is :

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

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


    }
}
like image 875
Chetan Lodhi Avatar asked Jan 27 '17 05:01

Chetan Lodhi


3 Answers

Instead of accessing the text from the cell's label you need to access the array that you have used to fill the tableView's cell data.

So you need to use UITableViewDelegate method didSelectRowAtindexPath and access the array that you are using with your tableView methods.

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])
}

Note: Once confirm that TableView delegate is properly connected with your ViewController so that it will call didSelectRowAt method when you select cell.

Edit: If you want to pass the data then try like this way.

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]       
    }
}
like image 162
Nirav D Avatar answered Oct 16 '22 09:10

Nirav D


This is working for me:

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

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

First line creates an instance of your cell type (or standard cell, not my case).

The second saves the content of your label (labelToAccess in this case) in a constant.

like image 6
Jorge Sánchez Avatar answered Oct 16 '22 11:10

Jorge Sánchez


Try this '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'

}
like image 1
iDeveloper Avatar answered Oct 16 '22 11:10

iDeveloper