0

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

我的问题是在主视图控制器的顶部添加子视图。

正如您在第一个屏幕截图中看到的那样,我有两个 subviewcontroller。我想在主视图控制器上添加第一个子视图,每当用户单击下一个自定义按钮时,第一个子视图消失,第二个子视图出现在主视图控制器的顶部。

firstsubview 实现如下:

    CGRect rect = [firstSurveyViewController.view frame];
    rect.origin.x = 5;
    rect.origin.y = 5;
    [firstSurveyViewController.view  setFrame:rect];
    [self.view addSubview:firstSurveyViewController.view];

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

第一个子视图 第二个子视图 主视图控制器 + 主视图控制器

4

3 回答 3

2

对于组合模式视图控制器,您有两个真正的选择(忽略 NDA 下的酷东西):

  1. 使用容器视图控制器模式将内部视图控制器插入其父级。

  2. 使用该视图控制器添加一个新窗口,类似于您在 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
}

这将:

  1. 添加您的子视图控制器。
  2. 将框架设置为您想要的任何内容。self.view.bounds如果您希望它占用整个空间,则可能是这样。
  3. 将视图添加到其父级。
  4. 通知子视图控制器它已添加。

要删除子视图控制器,您将再次从链接中执行相反的操作:

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

这将:

  1. 通知您的子视图控制器它将消失。
  2. 从视觉堆栈中删除其视图。
  3. 将其从其父级中删除。
于 2013-07-12T16:52:58.497 回答
1

你有两个选择。

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

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

编辑

看到这个帖子。

于 2013-07-12T16:33:36.187 回答
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
}];
于 2013-07-12T16:45:16.120 回答