请参阅以下附图以了解更多信息。
场景是:我有五个视图控制器
每个视图在推送
时导航到下一个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'。
任何建议都受到高度赞赏。
谢谢,
答案 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过渡方法。
这对我有用。