ContainerView childViewControlllers视图框架占整个屏幕

时间:2014-12-17 12:52:38

标签: ios objective-c iphone storyboard

请参阅以下附图以了解更多信息。

viewControllers

场景是:我有五个视图控制器

每个视图在推送

时导航到下一个viewController

现在MidContainerViewController已经有了嵌入FirstViewController的容器。

MidContainerViewController的底部是一个静态视图,在进一步导航时不应该更改。

导航FirstViewController的大小应该等于容器

当我从FirstViewController导航到SecondViewController时,它的大小也应该是Container。

目标1:'FirstViewController'和'SecondViewController'不应该使整个屏幕与MidContainerViewController上的bottomView图像重叠。

目标2:我必须在SecondViewController的最后一次'push'上弹出“View Controller”。

解决方案:

1)目前我已经将根“视图控制器”嵌入到navigationController中。目标2没问题。它成功导航回root。但无法实现目标1

2)如果我使用navigationController嵌入了“第一视图控制器”,则实现目标1但是开始面向目标2的问题。它仅回弹到'MidContainerViewController'。

任何建议都受到高度赞赏。

谢谢,

3 个答案:

答案 0 :(得分:1)

假设您在不使用情节提要的情况下手动处理推送/弹出事件,我建议您不要从FirstViewController推送MidContainerViewController。通过以下代码将下一个视图控制器添加为子视图控制器:

FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:[NSBundle mainBundle]];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

[self addChildViewController:navController];
[navController.view setFrame:CGRectMake(0.0f, 0.0f, _containerView.frame.size.width, _containerView.frame.size.height)];
[_containerView addSubview:navController.view];
[navController didMoveToParentViewController:self];

从上面的代码中,您将实现您的第一个目标。在上面的代码中,FirstViewController在其自己独立的导航控制器对象上启动,因此它将具有不同的导航堆栈。所以如果你进一步推动并弹出FirstViewController& SecondViewController,您的观点不会占据整个屏幕。但是如果从最后一个视图控制器调用popToRootViewController,那么根视图控制器将在该特定容器视图中为FirstViewController

要实现第二个目标,您必须创建一个公共属性,以包含AppDelegate类中主导航控制器对象的引用。从该导航控制器对象创建根视图控制器。在您的上一个视图控制器中,您必须从AppDelagate类中获取该导航控制器属性的引用,然后从该对象中调用popToRootViewController

答案 1 :(得分:0)

我认为你必须从secondView Controller展示你的根视图控制器,而不是嵌入到根视图控制器。

答案 2 :(得分:0)

谢谢大家。 问题得到解决,目标都实现了。

我只保留了一个导航控制器作为根视图控制器。

我创建了一个customContainerViewController。 该类具有应该显示的所有子节点的实例。 此类充当其每个childViewController的委托。使customContainerViewController成为每个childViewController的deleagte。

我使用委托方法更新了孩子,并在UIKit中使用了UIView过渡方法。

这对我有用。