ios如何以编程方式添加 ChildVC?

发布时间: 2017/3/21 22:35:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 storyboard :myStoryBoard

你可以看到我有MenuViewController: UIViewController与容器。容器是MenuTableViewController: UITableViewControllerMenuTableView: UITableView

想做什么是容器的改变我 (MenuTableViewController) 的大小和添加到我的 mainVC 的另一个子元素。

我在 MenuViewController 中添加︰

-(void)viewDidAppear:(BOOL)animated {

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    MenuTableViewController* secondChildVC = [sb instantiateViewControllerWithIdentifier:@"MenuTableViewController"];
    [secondChildVC.view setBackgroundColor:[UIColor redColor]];
    [self addChildViewController:secondChildVC];
    NSLog(@"MenuTableViewController.view info: %@",secondChildVC.view);
    NSLog(@"secondChildVC views: %@",[secondChildVC.view subviews]);

    MenuTableViewController *firstChildVC = [self.childViewControllers objectAtIndex:0];
    [firstChildVC.view setFrame:CGRectMake(160, 0, 160, 504)];
    [firstChildVC.view setBackgroundColor:[UIColor greenColor]];
    NSLog(@"firstChildVC views: %@",[firstChildVC.view subviews]);

}

这是我的日志︰

MenuTableViewController.view info: <MenuTableView: 0x8910e00; baseClass = UITableView; frame = (0 20; 320 548); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x761eca0>; layer = <CALayer: 0x76202b0>; contentOffset: {0, 0}>
2013-05-03 17:20:10.796 TestStories[41780:c07] secondChildVC views: (
    "<UIImageView: 0x76205e0; frame = (0 541; 320 7); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7620680>>",
    "<UIImageView: 0x7620740; frame = (313 517; 7 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x76207e0>>"
)
2013-05-03 17:20:10.798 TestStories[41780:c07] firstChildVC views: (
    "<UITableViewCell: 0x7143110; frame = (0 320; 160 320); autoresize = W; layer = <CALayer: 0x713cc10>>",
    "<UITableViewCell: 0x7140b90; frame = (0 0; 160 320); autoresize = W; layer = <CALayer: 0x7140ce0>>",
    "<UIImageView: 0x7135000; frame = (0 497; 320 7); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x71351b0>>",
    "<UIImageView: 0x7135270; frame = (153 517; 7 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7135310>>"
)

为什么我的 secondChildVC 不包含 TableViewCells 吗?不知道。

你可以看到我用红色和绿色的颜色背景 (红色为 secondChildCV)。但可能永远不会出现。下面是截图︰enter image description here

解决方法 1:

我认为你不正确地做几件事情。子视图控制器将同样大小的容器的视图,所以你应该有 IBOutlet 到容器的视图,并改变它的大小,而不是更改大小的子视图控制器。

第二个子元素,你添加它作为一个子元素,但你永远不会将其视图添加到 MenuViewController 的视图。您还应调用 didMoveToParentViewController 右后您将其添加为一个子元素。所以你需要做一些事情一样︰

    MenuTableViewController* secondChildVC = [self.storyboard instantiateViewControllerWithIdentifier:@"MenuTableViewController"];
   [secondChildVC.view setBackgroundColor:[UIColor redColor]];
   [self addChildViewController:secondChildVC];
   [secondChildVC didMoveToParentViewController:self];
   secondChildVC.view.frame = CGRectMake(0,0,160,504);
   [self.view addSubview:secondChildVC.view];

还要注意的是,你可以更加简单地获取引用 storyboard 与 self.storyboard

官方微信
官方QQ群
31647020