我正在努力在用户开始使用我的应用之前进行用户调查,这是我研究的典型数据集合。
我的问题是在mainviewcontroller的顶部添加子视图。
我有两个subviewcontroller,你可以在第一个screenshoot中看到。我想在mainviewcontroller上添加第一个子视图,每当用户点击下一个自定义按钮时,firstsubview就会消失,而secondsubview会出现在mainviewcontroller的顶部。
第一次实施如下:
CGRect rect = [firstSurveyViewController.view frame];
rect.origin.x = 5;
rect.origin.y = 5;
[firstSurveyViewController.view setFrame:rect];
[self.view addSubview:firstSurveyViewController.view];
但我想删除第一个视图,并在用户点击下一个按钮时添加第二个。 我该如何实施?
答案 0 :(得分:2)
对于编写模态视图控制器,你有两个真正的选择(在NDA下忽略很酷的东西):
使用Container View Controller pattern将内部视图控制器插入其父级。
使用该视图控制器添加一个新窗口,类似于在AppDelegate中执行此操作的方式。创建窗口,将您的孩子添加为根视图控制器,使其成为键和可见。这实际上是UIAlertView
对您的应用执行类似行为的行为。
我不能说你的情况会更好,但我对容器视图控制器有更多的经验,所以我会给你亮点。要添加子视图,您需要在父视图控制器中执行以下步骤(来自上面的链接):
- (void) displayContentController: (UIViewController*) content;
{
[self addChildViewController:content]; // 1
content.view.frame = [self frameForContentController]; // 2
[self.view addSubview:self.currentClientView]; // 3
[content didMoveToParentViewController:self]; // 4
}
这将:
self.view.bounds
。要删除子视图控制器,您将从链接中执行相反的操作:
- (void) hideContentController: (UIViewController*) content
{
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
}
这将:
答案 1 :(得分:1)
你有两个选择。
将两个控制器用作模态控制器。在第一个控制器上点击Next后,将其关闭并以模态方式调用第二个控制器。
另一个更好的选择(在我看来)是使用模态UINavigationController
一个接一个地呈现这两个系列的控制器。您可以在导航控制器中推动控制器,完成后,您可以将其关闭并显示主控制器。
修改强>
请参阅this帖子。
答案 2 :(得分:0)
视图之间的转换很容易 -
1)直接前进
-(IBAction):onNextButtonClick:(id)sender
{
[self.firstViewController.view removeFromSuperView];
self.secondViewController.view.frame = newFrame;
[self.view addSubView:self.secondViewController.view];
}
2)如果你想要一些精美的动画,试试这个 -
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionTransitionCurlDown animations:^{
[self.firstViewController.view removeFromSuperView];
self.secondViewController.view.frame = newFrame;
[self.view addSubView:self.secondViewController.view];
} completion:^(BOOL finished) {
//Completion
}];