didselectrowatindexpath textlabel return

时间:2018-05-30 14:57:02

标签: ios swift uitableview

我正在尝试从按下的单元格返回titleField或标题值。经过一些挖掘后,我发现了一些应该有效的代码,但是我得到了错误:

  

'UITableViewCell'类型的值没有成员'titleField'

对于标题,标签等所有其他项目也是如此。

extension SearchViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return posts.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier:"searchCell", for: indexPath)
        as! CustomTableViewCell
        cell.titleField?.text = posts[indexPath.row].caption
        cell.descriptionField?.text = posts[indexPath.row].description
        cell.tagsField?.text = posts[indexPath.row].tags
        let photoUrl = posts[indexPath.row].photoUrl
        let url = URL(string: photoUrl)
        cell.SearchImage.sd_setImage(with: url, placeholderImage: nil)
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let indexPath = tableView.indexPathForSelectedRow

        //getting the current cell from the index path
        let currentCell = tableView.cellForRow(at: indexPath!)! as UITableViewCell

        //getting the text of that cell
        let currentItem = currentCell.titleField!.text //HERE IS THE ERROR!
    }
}

3 个答案:

答案 0 :(得分:5)

永远不要使用单元格来获取数据。从您的数据模型中获取数据,就像在cellForRowAt中一样。

didSelectRowAt提供刚刚选择的行的索引路径。

将您的didSelectRowAt更新为:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let caption = posts[indexPath.row].caption
    let tags = posts[indexPath.row].tags
}

答案 1 :(得分:2)

问题是:您在DidSelectRow方法中将单元格初始化为UITableViewCell。只需将其更改为CustomTableViewCell

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

    // getting the current cell from the index path
    let currentCell = tableView.cellForRow(at: indexPath!)! as CustomTableViewCell     // THE SOLUTION

    // getting the text of that cell
    let currentItem = currentCell.titleField!.text 
}

或者您也可以使用数据数组来使用indexPath

检索标签值

答案 2 :(得分:1)

是的,您将单元格转换为didSelectRowUITableViewCell而不是CustomTableViewCell。另一点是您可以直接使用indexPath。不需要let indexPath = tableView.indexPathForSelectedRow

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

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

    //getting the text of that cell
    let currentItem = currentCell.titleField!.text
}