在MainViewController顶部添加子视图

时间:2013-07-12 16:19:54

标签: ios

我正在努力在用户开始使用我的应用之前进行用户调查,这是我研究的典型数据集合。

我的问题是在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];

但我想删除第一个视图,并在用户点击下一个按钮时添加第二个。 我该如何实施?

firstSubview secondSubView mainViewController + mainViewController

3 个答案:

答案 0 :(得分:2)

对于编写模态视图控制器,你有两个真正的选择(在NDA下忽略很酷的东西):

  1. 使用Container View Controller pattern将内部视图控制器插入其父级。

  2. 使用该视图控制器添加一个新窗口,类似于在AppDelegate中执行此操作的方式。创建窗口,将您的孩子添加为根视图控制器,使其成为键和可见。这实际上是UIAlertView对您的应用执行类似行为的行为。

  3. 我不能说你的情况会更好,但我对容器视图控制器有更多的经验,所以我会给你亮点。要添加子视图,您需要在父视图控制器中执行以下步骤(来自上面的链接):

    - (void) displayContentController: (UIViewController*) content;
    {
        [self addChildViewController:content];                 // 1
        content.view.frame = [self frameForContentController]; // 2
        [self.view addSubview:self.currentClientView];         // 3
        [content didMoveToParentViewController:self];          // 4
    }
    

    这将:

    1. 添加子视图控制器。
    2. 将框架设置为您想要的任何内容。如果您想占用整个空间,可以self.view.bounds
    3. 将视图添加到其父级。
    4. 通知子视图控制器已添加它。
    5. 要删除子视图控制器,您将从链接中执行相反的操作:

      - (void) hideContentController: (UIViewController*) content
      {
         [content willMoveToParentViewController:nil];  // 1
         [content.view removeFromSuperview];            // 2
         [content removeFromParentViewController];      // 3
      }
      

      这将:

      1. 通知您的子视图控制器它将消失。
      2. 从可视堆栈中删除其视图。
      3. 将其从其父级中删除。

答案 1 :(得分:1)

你有两个选择。

  1. 将两个控制器用作模态控制器。在第一个控制器上点击Next后,将其关闭并以模态方式调用第二个控制器。

  2. 另一个更好的选择(在我看来)是使用模态UINavigationController一个接一个地呈现这两个系列的控制器。您可以在导航控制器中推动控制器,完成后,您可以将其关闭并显示主控制器。

  3. 修改

    请参阅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
}];