将数据从Table View Controller传递到Embedded Container View

时间:2014-05-04 22:15:45

标签: objective-c xcode uiviewcontroller

作业表视图控制器中的单元格数据需要设置为作业详细信息视图控制器

使用PrepareForSegue将数据从作业表视图控制器传递到作业容器视图控制器不是问题。 enter image description here

  1. 我尝试从作业表视图控制器发送NSNotification,但作业详细信息视图控制器的viewDidLoad在加载之前已加载NSNotification被触发,我不认为这是一个很好的编程。

  2. 我已经尝试了委托,但作业表视图控制器没有对作业详细信息视图控制器的引用。

  3. 我已尝试在作业容器视图控制器中建立容器视图的插座连接,但它的类型为UIView,所以我找不到对作业详细信息视图控制器的引用?

  4. 这样做的正确方法是什么?非常感谢你们!

    JobTableViewController.m 这可行。

    - (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 
    }
    

1 个答案:

答案 0 :(得分:1)

我还没有掌握整个情况。我认为以下是你需要的。首先,您需要拥有一个包含所有作业数据的共享模型。

作业详细信息视图控制器下:

-(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.
}

viewDidAppear 作业容器视图控制器

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