如何将子ViewController的视图添加到父View控制器的子视图?

时间:2015-11-25 09:37:09

标签: ios objective-c uiviewcontroller parent-child

您是我在我父项ViewController项目中的IOS初学者我添加了One ContentView。

在这里,我想在我的父ViewControllers ViewController上加载两个子ContentView(它们是表列表和表列表详细信息页面)。

根据我的代码,我可以在ChildViewController parentViewController上加载表格列表ContentView,如下图所示。

但是当我点击表格列行时,我想在ChildViewContoller parentViewController上加载明细ContentView

我该怎么做?

请帮帮我。

我的代码: -

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

3 个答案:

答案 0 :(得分:0)

试试这个:

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

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

}

答案 1 :(得分:0)

我不确定我是否正确解决了您的问题,我认为您应该尝试编写一个委托方法,该方法将返回父视图控制器在其内容视图中显示所有内容所需的数据。

通过这种方式,您可以真正推送任何您想要的内容,视图,数据等。

关于如何设置,请检查: How do I set up a simple delegate to communicate between two view controllers?

答案 2 :(得分:0)

是的,确定你可以做到。

我只是像这样修改你的tableView:didSelectRowAtIndexPath功能

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

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

另外一条评论,当你想从DetailViewController删除(返回)ParentController时,你必须输入这样的代码

- (IBAction)btnRemoveViewTapped:(UIButton *)sender{
 [self removeFromParentController];
[self.view removeFromSuperView ];
}