Search code examples
iosswiftuiviewcontrollercell

How to pass data From VC to Cell?


i am wondering how I can pass data from a ViewController to a cell?

I am a beginner so I may oversee the obvious :P

I have a home VC and when you press on a commentButton you get to the CommentVC which holds the postId of the post. As I want to be able to like a comment( which works perfectly) and to notice the user about his comment being liked(which does not work for now) I need to have the postId not only in the commentVC ( which holds the correct one) but also in the cell.

this is the code where I pass data from the HomeVc to the CommentVC

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "CommentSegue" {
        let commentVC = segue.destination as! CommentViewController
        let commentCell = CommentTableViewCell()
        let postId = sender as! String
        commentCell.postId = postId
        commentVC.postId = postId
    }
}

When I print out both variables in CommentVc and CommentCell, only the CommentVc shows the correct one whereas the Cell has "nil" as the print out statement.

Any Idea how I can pass it?


Solution

  • You should not pass a table cell. Since you already passed the postId to your comment view controller, you can access to this id from a table view cell in your comment view controller in this way

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "EditorFontCell") as! EditorFontCell
    
        print(self.postId)
        //do what you want with postId with the current cell object here
    
        return cell
    }
    

    Now remove the cell in segue

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "CommentSegue" {
            let commentVC = segue.destination as! CommentViewController
            let postId = sender as! String
            commentVC.postId = postId
        }
    }