blaw
blaw

Reputation: 35

How to make a push segue when a specific UITableViewCell is selected

I am working on my first iOS app and new student to swift.

Everything is working however I am having trouble figuring out how to segue from a specific cell to a third view controller. I have a IOS UITableView with three sections and a total of (44) cells. All cells when tapped segue to one DetailVC titled: showProductDetai which is fine. The problem that I am having is that I need to have only (1) particular cell in section 0 row 5 in the UITableView to go to its own ViewController in which I titled: second view controller instead of the normal showProductDetail VC. Is there an intelligent way to make the specific cell in section 0 row 5 of the tableView go to second view controller when selected?

Here is my current code that is working. How would I code to make the changes?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ProductCell", for: indexPath) as! ProductTableViewCell

    // Configure the cell...
    let productLine = productLines[indexPath.section]
    let products = productLine.products
    let product = products[indexPath.row]

    cell.product = product

    return cell
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    let productLine = productLines[section]

    return productLine.name
}

// Mark: UITableViewDelegate

var selectedProduct: Product?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let productLine = productLines[indexPath.section]
    let product = productLine.products[indexPath.row]
    selectedProduct = product
    performSegue(withIdentifier: "ShowProductDetail", sender: nil)


}

// Mark: - Navigation

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "ShowProductDetail" {
        let DetailVC = segue.destination as! DetailViewController
        DetailVC.product = selectedProduct

    }
}

Upvotes: 0

Views: 58

Answers (2)

user4886069
user4886069

Reputation:

Write a segue code for the desired section and row:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if indexPath.section == 0 && indexPath.row == 5 {
        //Perform Segue
    } else {
        //Rest of the functionality
    }
}

Make sure you have connected proper Sugues and given proper identifiers in Storyboard.

You don't need to write prepare Segue method

Upvotes: 0

Michael Dautermann
Michael Dautermann

Reputation: 89509

see what I did here? You can use the indexPath parameter to get the section & row the user touched, and then you can set up your programmatic segue.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    if ((indexPath.section == 0) && (indexPath.row == 5)) {
        performSegue(withIdentifier: "GoToSecondViewController", sender: nil)
     } else {
        let productLine = productLines[indexPath.section]
        let product = productLine.products[indexPath.row]
        selectedProduct = product
        performSegue(withIdentifier: "ShowProductDetail", sender: nil)
    }
}

Upvotes: 2

Related Questions