我正在摆弄一些代码来尝试让UIViewController包含工作(在iPad应用中)。
场景如下:我有一个视图,我想在其上显示第二个视图。我想让第二个(不同的)UIViewController管理与第二个视图的所有交互。第一个视图将按下按钮加载第二个视图。按下按钮时,以下代码在第一个控制器中运行:
-(void)displayPropertyView // <-button triggers this
{
// Need to instantiate a new view and add it to the main editor view.
HPSQuestionListController* questionListController = [ [ HPSQuestionListController alloc ] init ];
[self.view addSubview:questionListController.view];
[self.view bringSubviewToFront:questionListController.view];
[self pushViewController:questionListController animated:YES];
}
-(void)pushViewController:(UIViewController*)controller animated:(BOOL)animated
{
[self addChildViewController:controller];
//[controller didMoveToParentViewController:self];
if (YES)
{
[self transitionFromViewController:self
toViewController:controller
duration:1.0
options:nil
animations:^{}
completion:^(BOOL finished){
[controller didMoveToParentViewController:self];
}];
}
}
应用程序在transitionFromViewController行崩溃:
儿童查看控制器和 必须有一个共同的父视图 调用时的控制器 - [UIViewController transitionFromViewController:toViewController:持续时间:选择:动画:完成:]“
任何人都知道如何解决这个问题?我对UIViewController遏制的理解是,我可以让两个控制器同时管理两个视图。这是错的吗?
答案 0 :(得分:1)
子视图控制器应该具有相同的父容器视图控制器(这是错误消息所说的)。要添加子视图控制器,请在容器视图控制器中使用此代码:
[self addChildViewController:myVC1];
[myVC1 didMoveToparentViewController:self];
在容器视图控制器中,您可以使用transitionFromViewController
[self transitionFromViewController:myVC1 toViewController:myVC2 duration:2.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{} completion:^(BOOL finished) {
[myVC1 removeFromParentViewController];
[myVC2 didMoveToParentViewController:self];
}];
你正在尝试做一些没有多大意义的事情,self
不是代码中的容器视图控制器。
有关完整示例,请参阅:https://github.com/toolmanGitHub/stackedViewControllers