Search code examples
iosswiftxcodeuikit

Perform segue depending on image tapped in TableViews custom cell


Simple as my question on title. I'm trying to go to another view controller depending on the image that someone tap on my table view. Eg: If you tapped on image1 perform segue gotoview1, if you tapped on image2 perform segue gotoview2.

I have an array of the images:

let gameImages = [UIImage(named: "DonkeyKong"), UIImage(named: "TRex"), UIImage(named: "SuperMarioRun"), UIImage(named: "Arcades1")]

and this is my cell for index, I tried to perfom the segue with the func imageAction but the app will crash:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

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

    cell.frontImage.image = gameImages[indexPath.row]
    cell.title.text = gameTitles[indexPath.row]

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "imageAction:")
    cell.frontImage.isUserInteractionEnabled = true
    cell.frontImage.addGestureRecognizer(tapGestureRecognizer)

    func imageAction(_ sender:AnyObject) {
        if cell.frontImage.image == UIImage(named: "DonkeyKong"){
           performSegue(withIdentifier: "goToDonkey", sender: self)
        }
    }

    return cell
}

I have a custom cell where I just linked the images as an outlet and perform some basic modifications. Just saying in case this matters.


Solution

  • try this instead.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
    cell.imageButton.addTarget(self, action: #selector(self.imageAction(_:)), for: .touchUpInside)
    cell.imageButton.tag = indexPath.row
    cell.frontImage.image = gameImages[indexPath.row]
    cell.title.text = gameTitles[indexPath.row]
    
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "imageAction:")
    cell.frontImage.isUserInteractionEnabled = true
    cell.frontImage.addGestureRecognizer(tapGestureRecognizer)
    return cell
    

    }

    func imageAction(_ sender:UIButton) {
            switch sender.tag{
            case 0:
                self.performSegue(withIdentifier: "goToDonkey", sender: self)
            case 1:
                performSegue(withIdentifier: "goToTRex", sender: self)
            case 2:
                performSegue(withIdentifier: "goToSuperMarioRun", sender: self)
            case 3:
                performSegue(withIdentifier: "goToArcades1", sender: self)
            default:
                break
            }
        }
    

    imageAction function is not member of self since is part o a tableview delegate function not self. that's why the unrecognized selector instance. but i maybe rewrite the func using another delegate, but since you dnt want to use the cell didselect only the image this may solve your problem.