Swift-通过选择行来放大自定义表行图像

时间:2018-11-04 13:18:52

标签: swift uitableview

我有一个UITableView,其中的行包含一个图像-我想使选定的行图像更大,这是我研究过的并具有此代码,但是,它返回的是默认的单元格图像,该图像在自定义单元格中定义,而不是在所选表格行中。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! myCell
 let items = self.itemsarray[indexPath.row]
    self.imageTapped(image: cell.itemsImageView.image!)
}

  func imageTapped(image:UIImage) {
    let newImageView = UIImageView(image: image)
    newImageView.image = image
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true

    let tap = UITapGestureRecognizer(target: self, action: #selector(ItemViewController.dismissFullscreenImage(_:)))
    newImageView.addGestureRecognizer(tap)


    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

这是问题行self.imageTapped(image: cell.itemsImageView.image!),将不胜感激。

2 个答案:

答案 0 :(得分:0)

替换此

let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! myCell

使用

let cell = tableView.cellForRow(at:indexPath) as! myCell

由于tableView.dequeueReusableCell应该返回另一个要使用的单元格而不是您单击的单元格,因此您只能在cellForRowAt内使用它

答案 1 :(得分:0)

问题是您在调用此代码时正在尝试创建新单元格:

let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! myCell

这意味着您始终会得到默认图像,如果尚未设置默认图像,则为nil。您必须获取已创建的单元格的引用,该单元格的图像视图中具有不同的图像。因此,您必须调用此名称:

let cell = tableView.cellForRow(at:indexPath) as! myCell

顺便说一句。您的班级名称myCell应该以大写字母开头