如何在UITableView中创建可单击单元格(Swift)

时间:2019-06-25 14:55:43

标签: ios swift uitableview interactive

我正在处理一个个人项目,我想使UITableView中的单元格可单击,这样,当按下它们时,它们会选择到下一个视图,并在按下时将其单元格中的信息与之一起传递。

我试图查看其他演示如何执行此操作的指南和视频,但是它们都已过时。对我而言似乎表现出希望但并未最终成功的一个参考是某个“ didSelectRowAt”函数的引用,但我无法使其正常工作。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as!
    CandidateTableViewCell
    if (indexPath.row >= candidateCells.count){
        print("???")
        candidateCells.append(cell)
        print("Strange error")
    }
    tableView.delegate = self
    cell.CandidateName?.text = candidatesNames[indexPath.item]
    cell.CandidatePos?.text = candidatesPositions[indexPath.item]
    //cell.candidateButton.tag = indexPath.row
    cell.CandidateName.sizeToFit()
    cell.CandidatePos.sizeToFit()
    print(candidateCells)
    print(indexPath.row)
    print(candidateCells.count)
    print(indexPath.row >= candidateCells.count)
    candidateCells[indexPath.item] = cell
    return cell

}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "Segue", sender: Any?.self)
}

我期望发生的事情是该单元格将变为可单击状态,当单击该单元格时,它将把我发送到应用程序的下一页,但是单击时什么也没有发生。该单元格不会突出显示,并且不会发生segue。非常感谢您提出的所有建议!

1 个答案:

答案 0 :(得分:0)

如果您想将信息传递给下一个单元格,我通常避免使用Segue,而是使用重用标识符设置ViewController。这样,您可以更轻松地传递信息。例如

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

        let vc = self.storyboard?.instantiateViewController(withIdentifier: "YOURRESUEIDENTIFIER") as! YOURVIEWCONTROLLERCLASS
        vc.infoToPass = cellData[indexPath.row]
        DispatchQueue.main.async {
            self.navigationController?.pushViewController(vc, animated: true)
        }

    }

您的另一个选择是实施shouldPerformSegueWithIdentifier()方法以正确设置数据。您将单击您的单元格,该单元格将调用performSegue函数,该单元格将调用shouldPerformSegueWithIdentifier,您可以在其中设置数据并返回true