0

I'm trying to pass the data from a table view cell to another view controller through the cell's 'edit' table view row action.

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let edit = UITableViewRowAction(style: .normal, title: "Edit") { (action, indexPath) in

        let editViewController = self.storyboard?.instantiateViewController(withIdentifier: "EditViewController") as! EditViewController
        self.present(editViewController, animated: true, completion: nil)

        let cell = self.recipeList[indexPath.row] as? RecipeTableViewCell

        editViewController.nameTextField.text = cell?.recipeNameLabel.text
    }

    edit.backgroundColor = UIColor(red: 167.0/255.0, green: 204.0/255.0, blue: 181.0/255.0, alpha: 1.0)

    return [edit]
}

This is my cell for row act function...

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

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

    let recipe = recipeList[indexPath.row]

    cell.recipeNameLabel!.text = recipe.name
    cell.ratingControl.rating = recipe.rating
    }
    return cell
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
EJ_95
  • 1
  • 3

1 Answers1

0

Instead of passing each value in your target VC, try to pass recipe object only. Then get values from that object and fill in your controls.

1) create recipe object in your EditViewController

 var editRecipe : Recipe! // Your Model class

2) Assign values

let editViewController = self.storyboard?.instantiateViewController(withIdentifier: "EditViewController") as! EditViewController
editViewController. editRecipe = recipeList[indexPath.row]
self.present(editViewController, animated: true, completion: nil)

3) in ViewDidload of EditViewController

if editRecipe != nil {
    //Fill data in lbls
    //lbl_name.text = editRecipe.name
}
Pratik Prajapati
  • 1,137
  • 1
  • 13
  • 26