Jim Clermonts
Jim Clermonts

Reputation: 2660

Passing data from Table View Controller to Embedded Container View

The data from the cell in Job Table View Controller needs to be pased to Job Detail View Controller.

Passing data from Job Table View Controller to Job Container View Controller is not a problem using PrepareForSegue. enter image description here

  1. I've tried sending a NSNotification from Job Table View Controller but the Job Detail View Controller's viewDidLoad is loaded before the NSNotification get's triggered and I don't think this is good programming.

  2. I've tried delegate but the Job Table View Controller does not have a reference to the Job Detail View Controller.

  3. I've tried making an outlet connection of the Container view in Job Container View Controller but it's of type UIView so I cannot find a reference to Job Detail View Controller in it?

What is the proper way to do this? Many thanks guys!

JobTableViewController.m this works.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{    
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    Job * selectedJob = [listOfJobs objectAtIndex:path.row];
    [[segue destinationViewController] sendSelectedJob:selectedJob];
}

JobContainerViewController.m

Job * currentJob;
@synthesize jobDescriptionLabel;

- (void)viewDidLoad
{
    [self updateFields:currentJob];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [[segue destinationViewController] sendSelectedJob:currentJob];
}

-(void) updateFields:(Job *)job {
    jobDescriptionLabel.text = job.job_name;
}

- (void) sendSelectedJob:(Job *)currentjob {
    currentJob = currentjob;
}

JobDetailViewController.m

Job *job;

- (void)viewDidLoad
{
    [self updateFields:job];
}

- (void) sendSelectedJob:(Job *)currentjob {
    job = currentjob;
}

-(void)updateFields:(Job *) job {
   // update fields 
}

Upvotes: 2

Views: 556

Answers (1)

Ricky
Ricky

Reputation: 10505

I haven't grasp the entire situation yet. I think the below is what you need. First of all, you will need to have a share model that contains the all the job data.

Under Job Detail View Controller:

-(void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDataOnJobDetails) name:@"showDataOnJobDetails" object:nil];
 }

-(void)viewWillDisappear:(BOOL)animated{
   [super viewWillDisappear:animated];
   [[NSNotificationCenter defaultCenter] removeObserver:self name:@"showDataOnJobDetails" object:nil];
}

-(void)showDataOnJobDetails{
  //TODO: Update whatever you need on showDataOnJobDetails using data from Share Model.
}

Under the viewDidAppear for Job Container View Controller

[[NSNotificationCenter defaultCenter] postNotificationName:@"showDataOnJobDetails" object:nil];

Upvotes: 1

Related Questions