如何使用Swift获取UITableView Cell的Label文本?

时间:2017-01-27 05:51:41

标签: arrays swift uitableview

我想制作简单的UITabelView。我用我的自定义类注册了它的单元格,命名为backgroundviewcell。我想获得所选单元格的标签。我尝试了很多次,但输出值为零。我也尝试过堆栈溢出的解决方案,但它对我不起作用。这是我的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
}

这是我的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)
}

和我的Segue方法是:

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

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


    }
}

4 个答案:

答案 0 :(得分:3)

您需要访问用于填充label单元格数据的数组,而不是从单元格tableView's访问文本。

因此,您需要使用UITableViewDelegate方法didSelectRowAtindexPath并使用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])
}

注意:确认TableView delegate已与ViewController正确关联,以便在您选择单元格时调用didSelectRowAt方法

编辑:如果您想传递数据,请尝试这样。

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

答案 1 :(得分:3)

这对我有用:

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

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

第一行创建您的单元格类型的实例(或标准单元格,而非我的情况)。

第二个将标签的内容(在本例中为labelToAccess)保存为常量。

答案 2 :(得分:1)

试试这个' 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'

}

答案 3 :(得分:0)

您没有为textLabel设置任何文本。因此它返回零值。

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