Search code examples
swiftuiimageview

Unable to add tapgesture for tableview cell image in swift


I am using GSImageViewerController this pod for imageview tap gesture.. which is working in viewcontroller

but i need tapgesture for tableview cell image so here i am getting error:

total code:

import UIKit
import GSImageViewerController
class tableviewViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!
var imageView: UIImageView!
var nameArray = ["hewjkew", "uhrueihriu", "jfkejfkefn", "ueyduieh", "uydhuegfhejh"]
var imageArray = ["fla.png","fla.png","fla.png","fla.png","fla.png"]


override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
}

 @objc func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return nameArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UITableViewCell
        cell.textLabel?.text = nameArray[indexPath.row]
        cell.imageView?.image = UIImage(named: imageArray[indexPath.row])
    
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
    cell.imageView?.isUserInteractionEnabled = true
    cell.imageView?.addGestureRecognizer(tapGestureRecognizer)

    return cell
}

@objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell

    let imageInfo = GSImageInfo(image: (cell.imageView?.image!)!, imageMode: .aspectFit)
    let transitionInfo = GSTransitionInfo(fromView: (cell.imageView)!)

    let imageViewer    = GSImageViewerController(imageInfo: imageInfo, transitionInfo: transitionInfo)

    present(imageViewer, animated: true, completion: nil)
}
}

here in this line let imageInfo = GSImageInfo(image: (cell.imageView?.image!)!, imageMode: .aspectFit) at exclamation mark i am getting below error

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

please how to fix this. please do help with code.


Solution

  • You shouldn't use

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell
    

    outside of cellForRowAt (you used it in imageTapped ) and replace

    let imageInfo = GSImageInfo(image: (cell.imageView?.image!)!, imageMode: .aspectFit)
    

    with

    let imageV = tapGestureRecognizer.view as! UIImageView // access the current clicked image cell
    let imageInfo = GSImageInfo(image:imageV.image!, imageMode: .aspectFit)
    

    as cell.imageView?.image! is properly nil for a dequeued cell