【问题标题】:How to add child ViewController's view to subview of the parent View controller?如何将子 ViewController 的视图添加到父 View 控制器的子视图中?
【发布时间】:2015-11-25 09:37:08
【问题描述】:

嗨,我是 IOS 的初学者,在我的 Parent ViewController 的项目中,我添加了一个 ContentView。

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

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

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

我该怎么做?

请帮帮我。

我的代码:-

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

【问题讨论】:

    标签: ios objective-c uiviewcontroller parent-child


    【解决方案1】:

    试试这个:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
    DetailViewController*VC = [DetailViewController instantiateViewControllerWithIdentifier:@"DetailViewController"];
    [self.view addSubview:VC.view];
    
    }
    

    【讨论】:

    • 不,我想在我点击 tablelist 行时推送到 DetailsViewController
    【解决方案2】:

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

    这样你就可以真正推送你想要的任何东西、视图、数据等。

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

    【讨论】:

    • 向子视图控制器添加协议,并将父视图控制器设置为其委托。我在回答中的链接中很好地解释了有关如何执行此操作的所有内容。
    【解决方案3】:

    是的,当然可以。

    我只是像这样修改你的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];
    }
    

    还有一条评论,当您想从ParentController 中删除(返回)DetailViewController 时,您必须输入这样的代码

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

    【讨论】:

    • 很好地使用您的代码 DetailViewControloler 在 parentViewController 上加载,但我想加载这个 parenet Viewcontroller ContentView
    • @Krish,通过单击 tableView:didSelectRowAtIndexPath,您将 DetailViewController 添加到 ParentViewController 的 ChildView。现在您可以检查 ParentViewController 的 ChildViewController,您将获得 ChildViewController 和 DetailViewController。如果我没记错的话,你想通过单击 tableView:didSelectRowAtIndexPath 来查看 ParentViewController。但是我的疑惑是这里你是把DetailViewController加到ParentViewController的ChildViewController,那么你就只能看到DetailViewController的View了。
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2015-06-24
    • 1970-01-01
    • 2016-01-03
    相关资源
    最近更新 更多