从父视图控制器再次推送时,子视图框架发生更改

时间:2018-06-30 08:57:39

标签: ios objective-c uitableview childviewcontroller parentviewcontroller

我在另一个视图控制器中添加了一个视图控制器的视图作为子视图。子视图控制器具有表视图。在单击didSelectRow时,可以多次推动子视图控制器,以在同一viewcontroller中显示更新的数据,效果很好。但是,当我从父视图推动子视图控制器时,子视图将其框架更改为原始viewcontroller框架,并离开了父视图。因此,我想确保它始终保留在其父视图的框架中,并且仅在父视图内部才会发生推入和弹出操作。

添加子视图:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
    ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
    [self addChildViewController:vc];
    [vc.view setFrame:self.tableFilters.frame];
    [self.viewContainer addSubview:vc.view];
    [vc didMoveToParentViewController:self];

用子视图控制器的didSelctRow方法编写的代码:

ChildViewController *newMyTableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildViewController"];
   newMyTableVC.delegate = self;
   [self.tableView reloadData];
   [self.navigationController pushViewController:newMyTableVC animated:YES];

1 个答案:

答案 0 :(得分:0)

由于您的子视图控制器未嵌入UINavigationController实例中,因此self.navigationController指向其父视图的导航控制器。这就是为什么在父视图控制器中发生推送和弹出的原因。

要在子视图控制器中执行推入和弹出操作,您必须将子视图控制器嵌入UINavigationController中:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self addChildViewController:nc];
[nc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:nc.view];
[nc didMoveToParentViewController:self];