如何模拟UITabBarViewController的行为?

时间:2010-12-01 17:13:54

标签: iphone ios4 uinavigationcontroller custom-controls uitabbarcontroller

我想在不使用它的情况下复制此控制器相同的功能,这是因为标签栏控制器根本无法自定义(固定大小,可切换状态选项卡等...)。

我想要一个自定义的“标签栏”,其中包含我想要的任何视图。而且我还需要推动视图控制器,将这个自定义标签栏固定在其位置上。

我看到很多应用程序执行此操作,我想知道是否使用不同的UIWindow对象(一个用于自定义选项卡栏,另一个用于内容)是最好的方法。

对此有何建议或指导?

提前致谢。

2 个答案:

答案 0 :(得分:1)

绝对不是UIWindows - 在iPhone应用程序中,应该只有一个UIWindow。

我会创建一个UIViewController子类,其顶部有一个新的导航栏ui,下面有一个UIView。此视图将用于包含您要在其中推送的控制器的所有视图。该视图将clipsToBounds设置为YES,以确保您的其他控制器视图不会与导航栏等重叠。

它还有一个数组来保存当前在其中的控制器列表。

您的控制器将实现pushViewController:animated:方法等,以允许您将其他视图控制器添加到堆栈 - 您可以将新控制器添加到您的阵列,并将其视图添加为控制器视图的子视图。

然而,实现这一点真的是相当多的工作 - 导航控制器将释放低内存警告的子控制器视图,处理旋转,动画开/关视图等。你是100%确定这是你的想做什么?

答案 1 :(得分:0)

我使用了一种非常简单的方法。我是UITabbarController的子类,在init期间:

    //  Custom TabBar View
    //
    self.tabBar.hidden = YES;
    MyTabBarView *myTabBarView = [[MyTabBarView alloc] initWithFrame:CGRectMake(0, 1024-44, 768, 44) // it'a an iPad app
                                                       configuration:configuration]; // an array of dictionary representing the view controllers
    [self.view addSubview:myTabBarView];
    [bottomBarView release];

然后我加载一些视图控制器:

aViewController.hidesBottomBarWhenPushed = YES; 

我在MyTabBarView实例上执行UITabBarViewController:

setSelectedIndex:

通过这种方式,我可以轻松实现可自定义的全屏应用程序。