如何创建管理两个子视图控制器的父视图控制器

时间:2013-01-10 03:43:47

标签: iphone ios uiviewcontroller

我正在努力为应用添加一些功能,这与iOS上的Springboard上的应用切换抽屉非常相似。我希望能够有一个我可以点击的按钮,它将为视图的y坐标设置动画,以便在底部显示另一个视图。就像我说的,非常类似于iOS上的主页按钮双击功能。

在做了一些环顾之后,似乎我需要将两个子视图控制器都包装到一个父视图控制器中。

我该怎么做呢?现有的视图控制器非常复杂,所以我很难搞清楚从哪里开始。

2 个答案:

答案 0 :(得分:2)

我不知道您需要使用父视图控制器来执行此操作。这段代码对我有用,可以做我认为你想要的。我有一个BOOL ivar来跟踪底部视图是否已经显示,并使用主视图中的相同按钮在两种状态之间切换。

-(IBAction)slideInController:(UIButton *) sender {
    if (viewRevealed == NO) {
        next = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
        next.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + self.view.frame.size.height, self.view.frame.size.width, 100); // my NextController's view was made 100 points high in IB.
        [self.view.window addSubview:next.view];
        [UIView animateWithDuration:.6 animations:^{
            self.view.center = CGPointMake(self.view.center.x, self.view.center.y - 100);
            next.view.center = CGPointMake(next.view.center.x, next.view.center.y - 100);
        } completion:^(BOOL finished) {
            viewRevealed = YES;
        }];
    }else{
        [UIView animateWithDuration:.6 animations:^{
            self.view.center = CGPointMake(self.view.center.x, self.view.center.y + 100);
            next.view.center = CGPointMake(next.view.center.x, next.view.center.y + 100);
        } completion:^(BOOL finished) {
            [next.view removeFromSuperview];
            viewRevealed = NO;
        }];
    }
}

我通常使用容器视图控制器来执行此类操作,但这很有效,并且非常简单。

答案 1 :(得分:0)

您可能想要使用UINavigationController,然后在点击按钮后再推送新的视图控制器。所以你会有你的主UIViewController,它有你不同的选择。当点击该按钮时,您将创建视图控制器的实例并将该视图控制器推送到堆栈顶部。您的代码可能看起来像这样

-(IBAction)ViewControllerOneTapped:(id)sender
{   
    UIViewController *vcOne = [[UIViewController alloc] initWithNibName:@"ViewControllerOne" bundle:nil];
    [self.navigationController pushViewController:vcOne animated:YES];
}

你的最终代码会比有人一直为你写的复杂得多,但这是你可能想要采取的总体方向。