Search code examples
swiftparse-platform

I want to send data when I tap a button in tableView Cell


I am implementing a commentView for my app. I have a main view which is tableview contains picture and a button to go comment view. I want that when user tap comment button in table view, view shows comment view and pass PFObject by prepareforSegue method.

now comment button works, but I have an error from prepareforsegue here is my code.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if (segue.identifier == "mainToComment") {


let destViewController : CommentVC = segue.destinationViewController as! CommentVC
destViewController.parentObjectID = parentObjectID
let selectedRowIndex = self.tableView.indexPathForSelectedRow

destViewController.object = (postsArray[(selectedRowIndex?.row)!] as? PFObject)

and here is my how my button works.

 @IBAction func commentButtonTapped(sender: AnyObject) {

    let button = sender as! UIButton
    let view = button.superview!
    let cell = view.superview as! MainTVCE
    let indexPath = tableView.indexPathForCell(cell)
    parentObjectID = postsArray[(indexPath?.row)!].objectId!!

when I debug, selectedRowIndex has no value(nil) I think it cause of I tap button instead of cell.

How can I set indexPath for this? or How can I make it work?


Solution

  • I don't know name of your main TableViewCell view controller. Assume that, I name this view controller is MainTableViewCell.

    I create a closure in MainTableViewCell:

    var didRequestToShowComment:((cell:UITableViewCell) -> ())?
    

    When button comment is tapped:

    @IBAction func commentButtonTapped(sender: AnyObject) {
        self.didRequestToShowComment?(self) // self is this UITableViewCell
    }
    

    In table cellForRowAtIndex... of your main view controller.

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        ...
        mainTableViewCell.didRequestToShowComment = { (cell) in
            let indexPath = tableView.indexPathForCell(cell)
            let objectToSend = postsArray[indexPath.row] as? PFObject
            // Show your Comment view controller here, and set object to send here
        }
        ...
    
    
        return cell
    }