我正在尝试从按下的单元格返回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!
}
}
答案 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)
是的,您将单元格转换为didSelectRow
至UITableViewCell
而不是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
}