1

Hi am beginner in IOS in my project in my Parent ViewController I have added One ContentView.

Here I would like to load two Child ViewControllers(they are table-list and table-list Detail page) on my Parent ViewController ContentView.

According to my code I am able to load table-list ChildViewController on my parentViewController ContentView as like below image.

But when I click on table-list row I want to load Detail ChildViewContoller on my parentViewController ContentView.

How can I do this?

Please help me.

my code:-

ParentViewController:-

#import "ParentViewController.h"
#import "ChildViewController.h"

@interface ViewController ()

@end

@implementation ParentViewController
@synthesize contentView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    ChildViewController *tableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildViewController"];

    tableViewController.view.frame = self.contentView.bounds;
    [tableViewController willMoveToParentViewController:self];
    [self.contentView addSubview:tableViewController.view];
    [self addChildViewController:tableViewController];
    [tableViewController didMoveToParentViewController:self];

}
@end

ChildViewController:-

#import "ChildViewController.h"

@interface ChildViewController ()

@end

@implementation ChildViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.items = @[@"One",@"Two",@"Three"];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.items count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    cell.textLabel.text = self.items[indexPath.row];
    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

 DetailViewController*VC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    [self.navigationController pushViewController:VC animated:YES];

}

@end
Elydasian
  • 2,016
  • 5
  • 23
  • 41
Krish
  • 4,166
  • 11
  • 58
  • 110

3 Answers3

0

Try this :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

DetailViewController*VC = [DetailViewController instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.view addSubview:VC.view];

}
Balaji Kondalrayal
  • 1,743
  • 3
  • 19
  • 38
0

I am not sure if I got your problem correctly, bu I think that you should try writing a delegate method that would return the data needed for the parent view controller to display everything in its content view.

This way you can really push anything you want, views, data etc.

As to how to setup this, check: How do I set up a simple delegate to communicate between two view controllers?

Community
  • 1
  • 1
Snacks
  • 513
  • 4
  • 22
  • Add a protocol to your child view controller, and set the parent view controller as its delegate. Everything on how to do this is explained really well in the link that I put in my answer. – Snacks Nov 25 '15 at 10:01
0

Yes, sure you can do it.

I just modify Your tableView:didSelectRowAtIndexPath function like this

- (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath
{

 DetailViewController*VC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
 [self.parentViewController.view addSubView:VC.view];
 [self.parentViewController addChildViewController:VC];
}

One More Comment, When You want to remove(Back) DetailViewController From ParentController then You must type code like this

- (IBAction)btnRemoveViewTapped:(UIButton *)sender{
 [self removeFromParentController];
[self.view removeFromSuperView ];
}
Jatin Patel
  • 396
  • 3
  • 14
  • well using your code DetailViewControloler loading on parentViewController but i want to load this parenet Viewcontroller ContentView – Krish Nov 25 '15 at 10:07
  • @Krish, by click on tableView:didSelectRowAtIndexPath, you are adding DetailViewController to ParentViewController's ChildView. Now you can check the ChildViewController Of ParentViewController you will get ChildViewController & DetailViewController. If I am not wrong you want to see ParentViewController by click on tableView:didSelectRowAtIndexPath. But my confusion is that here you are adding DetailViewController to ParentViewController's ChildViewController, then you can only see DetailViewController's View. – Jatin Patel Nov 25 '15 at 10:52