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

Che*_*dhi 5 arrays uitableview swift

我想制作简单的 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
}
Run Code Online (Sandbox Code Playgroud)

这是我的 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)
}
Run Code Online (Sandbox Code Playgroud)

我的转场方法是:

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

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


    }
}
Run Code Online (Sandbox Code Playgroud)

Nir*_*v D 6

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])
}
Run Code Online (Sandbox Code Playgroud)

注意:一旦确认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]       
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

这对我有用:

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

    let cell = tableView.cellForRow(at: indexPath) as! YourCellType
    let labelContent = cell.labelToAccess.text
}
Run Code Online (Sandbox Code Playgroud)

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

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