user3700449
user3700449

Reputation: 91

How to transfer data from table cell to a new view controller using prepare for segue method?

How to use prepare for segue to transfer the images (tweetImg) and date (dateLbl) from tablecell (mainCell) to the Newviewcontroller when I select the cell? in my case I am using parse.com as my backend to retrieve the images and dates data. I am new to programming would appreciate some help, thank you.

mainVC

import UIKit
class mainVC: UIViewController, UITableViewDataSource, UITableViewDelegate,  {

    @IBOutlet weak var resultsTable: UITableView!

    var resultsStartdateArray = [String]()
    var resultsTweetImageFiles = [PFFile?]()

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return resultsTweetImageFiles.count
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 350
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell:mainCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! mainCell
        cell.dateLbl.text = self.resultsStartdateArray[indexPath.row]
      resultsTweetImageFiles[indexPath.row]?.getDataInBackgroundWithBlock({
                (imageData:NSData?, error:NSError?) -> Void in

                if error == nil {

                    let image = UIImage(data: imageData!)
                    cell.tweetImg.image = image


                }

            })
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.performSegueWithIdentifier("SendDataSegue", sender: self)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
    {
        if (segue.identifier == "SendDataSegue")
        {
            let destination: NewViewController =  segue.destinationViewController as! NewViewController
           //  I believe the missing code should be here 
        }
    }
}

mainCell

import UIKit
class mainCell: UITableViewCell {

      @IBOutlet weak var tweetImg: UIImageView!
      @IBOutlet weak var dateLbl: UILabel!

      override func awakeFromNib() {
      super.awakeFromNib()
   }
}

NewViewController

import UIKit

class NewViewController: UIViewController {

      @IBOutlet weak var dateLbl: UILabel!
      @IBOutlet weak var tweetImg: UIImageView!

 var titleString: String!

override func viewDidLoad()
{
    super.viewDidLoad()

    self.dateLbl.text = self.titleString

}

Upvotes: 1

Views: 134

Answers (2)

Dimuth
Dimuth

Reputation: 752

Bellow i have mentioned a sample template code. organize your code according to bellow mentioned code. important part is select a cell in the prepareForSegue instead of in didSelectRowAtIndexPath. Which is let IndexPath = self.tableView.indexPathForSelectedRow()!

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

    //Index path is the selected cell  
    let IndexPath = self.tableView.indexPathForSelectedRow()!

    //Here you can assign your tweetImg and dateLbl

    let newViewController = segue.destinationViewController as! NewViewController
    newViewController.dateLbl.text = //your date label value
    //here assign your image to destination view controller property
}

Upvotes: 1

vadian
vadian

Reputation: 285072

Delete the method didSelectRowAtIndexPath and connect the segue to the table view cell rather than the view controller.

When a cell is selected it's passed as the sender parameter in the prepareForSegue method.

A side note : Don't perform background tasks in the view – the cellForRowAtIndexPath method – , do it in the model – the items in the data source array – and then call reloadData()

Upvotes: 0

Related Questions