这是我的代码。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CellAvailableJobs = self.tblJobs.dequeueReusableCell(withIdentifier: "CellAvailableJobs") as! CellAvailableJobs
let jobsNearByObj:JobsNearBy = self.jobsArray![indexPath.row]
cell.loadCell(jobsNearByObj: jobsNearByObj)
cell.btnHeart.addTarget(self, action: #selector(JobsVC.btnBookmarkAction), for: .touchUpInside)
cell.btnHeart.tag = indexPath.row
return cell
}
@IBAction func btnBookmarkAction(_ sender: AnyObject){
let button = sender as? UIButton
print("tag: \(String(describing: button?.tag))")
let cell = button?.superview?.superview as? UITableViewCell
let indexPath = tblJobs.indexPath(for: cell!)
print("bookmarkedJobId: \(String(describing: indexPath.row))")
}
我从网上获取数据并在tableview上填充它们,一切运行良好。我想在点击单元格上的按钮时打印indexpath.row。在上面的方法中,编译器抱怨单元格为零。这一行:让indexPath = tblJobs.indexPath(for:cell!)。
此代码有什么问题。在此代码中单元格如何为零。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
问题是当单元格当前不可见时,它的值为nil,您无法显式展开可选值
let cell = button?.superview?.superview as? UITableViewCell
试试这个
if(cell != nil)
{
let indexPath = tblJobs.indexPath(for: cell!)
}
旁边的单元格类型为CellAvailableJobs
,您使用as? UITableViewCell
答案 1 :(得分:0)
行let cell = button?.superview?.superview as? UITableViewCell
似乎无法成为UITableViewCell
个实例,因此cell
为nil
。
正如你所知,这实际上是你想要的:
let cell = button?.superview?.superview?.superview as? UITableViewCell