0

我想复制此控制器相同的功能,而不使用它,这是因为标签栏控制器根本不可定制(固定大小,可切换状态选项卡等)。如何模拟UITabBarViewController的行为?

我想要一个自定义的“标签栏”,其中包含我想要的任何视图。此外,我还需要推送视图控制器,将此自定义选项卡栏固定在其位置上。

我看过很多应用程序都这样做,我想知道是否使用不同的UIWindow对象(一个用于自定义选项卡栏和另一个用于内容)是最好的方法。

对此有何建议或指导?

在此先感谢。

回答

1

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

我会做一个UIViewController子类,它的顶部有一个新的导航栏ui,下面有一个UIView。这个视图将被用于包含你将要推入的控制器的所有视图。该视图将clipToBounds设置为YES以确保您的其他控制器视图不会与您的导航栏等重叠。

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

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

但是,实际上做了很多工作 - 导航控制器会在低内存警告,处理旋转,动画开/关视图等方面发布子控制器视图。您是否100%确定这是什么你想要做什么?

+0

那么,我知道这将很难实现,我喜欢你的解决方案。那么如果是一个导航控制器,我只需要在主控制器中放置一个内容视图,然后在任何时候将该内容视图切换到不同视图控制器的视图,并在这些转换之间进行动画处理。 – 2010-12-03 16:30:54

+0

这将工作正常,但你必须做后面的按钮用户界面自己的东西:) – deanWombourne 2010-12-04 13:30:06

0

我已经使用了一个非常简单的方法。余子类的UITabBarController和初始化期间:

// 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: 

这样我有一个可定制的全屏应用程序没有痛苦。