多个UIViewControllers同时进行

时间:2011-02-17 23:45:32

标签: ios uiviewcontroller

我想在导航控制器中占用整个屏幕的UITableView。我有一个较小的自定义UIView需要从底部向上滑动,将表格视图挤压100像素。自定义视图需要是静态的,而不是在用户导航tableview时移动。我被告知不要在同一个屏幕上管理2个UIViewControllers(VC)。

目前,我的AppDelegate从VC向其窗口添加子视图,然后使用

加载tableview和自定义视图

[self addSubview:tablviewcontroller.view]; [self addSubview:customViewController.view];

应如何实施?

2 个答案:

答案 0 :(得分:0)

我的结构方式如下: 有一个UIViewController子类,其视图占用整个屏幕。它将有两个子视图。 第一个子视图:包含表视图控制器的UINavigationController的视图。 第二个子视图:自定义UIView。

最初将UINavigationController的框架设置为主视图控制器视图的整个边界以及屏幕可见区域正下方的自定义视图框架。

当您需要向上滑动视图时,使用UIView动画通过降低高度来更改UINavigationController视图的框架,并通过将其y坐标更改为现在为框架内来更改自定义UIView的框架。

答案 1 :(得分:0)

好。您需要一个导航控制器,其根视图是一个表视图。然后,通过用户输入,您希望此表格视图向上滑动100像素,另一个视图在底部进行。当另一个视图停留在那里时,用户可以继续使用表视图。

我将如何做到这一点:

创建一个通用视图控制器(让我们称之为NavigationWithAuxiliaryViewController)。此类的根视图涵盖了所有应用程序窗口。

此视图的实例为UINavigationController,例如navController。它还有一个UIView(对于另一个视图)作为其属性(比如auxView)。将另一个视图放在底部。但是,默认情况下隐藏此视图。此外,UINavigationController根视图的框架覆盖整个视图。

当您决定挤压表视图时,请修改UINavigationController的frame属性。做这样的事情(虽然这不丑陋):

if (slideViewOn) {
    [UIView beginAnimations:@"slideUp" context:nil];
    navController.view.frame = CGRectMake(0, 0, 320, 260);
    auxView.hidden = NO;
    [UIView commitAnimations];
} else {
    [UIView beginAnimations:@"slideDown" context:nil];
    navController.view.frame = CGRectMake(0, 0, 320, 480);
    auxView.hidden = YES;
    [UIView commitAnimations];
}

挤压整个导航/表格的最简单方法是修改导航控制器的整个框架,这就是为什么你需要一个单独的视图(在导航控制器之外)用于另一个视图的原因。