2010-09-22 36 views
1

我想自定义UITabBarController的标签栏的外观。我想改变颜色,图标在被选中时的样子,最重要的是,我想减小自定义工具栏的大小。自定义UITabBarController

我这个方法,并在其中的障碍是:

A),它来到我首先想到的解决方案是创建自己的viewController将在底部像一个的UITabBarController按钮和添加此的viewController到窗口。一旦用户点击底部的按钮,将可视区域中的视图与用户现在点击的按钮对应的新viewController切换。

而这种策略的问题是:因为我换景的相应viewControllers不会得到这些消息:

  • viewWillAppear
  • viewWillDisappear
  • viewDidAppear
  • viewDidDisappear

和所有的旋转事件

B)我可以用公认的答案的做法,在这个线程: Custom UITabBarController Problems with View Controllers and Views

但我的TabBar的高度是不一样的默认值。

由于上述原因,我不能使用这些方法。

说了这些之后,我没有更多选项卡的特殊要求。我将只有5个选项卡将显示在选项卡栏中,因此标签栏项目的重新排序超出了范围。

等待的建议和想法。

回答

2

我从来没有尝试过这样的事情,但正如我所看到的,您应该手动将这些消息发送到您的子视图控制器。

不应该是发送问题-viewWill/Did(Dis)在适当的时刻出现在正确的控制器上。这也是UITabBarController所做的。

至于旋转事件:

  • shouldAutorotateToInterfaceOrientation:,这个消息转发给你的孩子的控制器,并根据他们的返回值设置你的返回值(UITabBarController只返回YES如果所有的子控制器的返回YES请求方向)。

  • 转发willRotateToInterfaceOrientation:duration:,didRotateFromInterfaceOrientation:willAnimateRotationToInterfaceOrientation:duration:当你收到他们的子控制器(至少到当前可见的)。

  • 如果您已经正确设置了子控制器视图的自动识别遮罩,那么当系统旋转自定义选项卡栏控制器的视图时,您可以正确旋转和调整其大小。 (至少我认为这应该是如何工作的。)

再次,我不确定这是否会起作用。

+0

嗯,感谢名单的建议。好吧,我可以按照你的说法进行定制。另外,我可以像所引用的那样转发所有消息。但担心的是:1.-看起来只会是一连串的呼叫! 2.视图控制器在视图加载时自动获得初始定向回调,即, -didRotateFromInterfaceOrientation,但在这种情况下,我们将不得不模拟它。 3.我担心未来可能出现的任何问题或障碍,因为这是我的应用程序的基础,我想知道这种风险是否值得考虑? – 2010-09-23 04:54:49

+0

这句话中的所有视图控制器的含义是:“如果其所有子控制器的所有子控制器对于所请求的方向返回YES,则UITabBarController只返回YES”,假设有4个选项卡,则如果与4个选项卡相对应的所有视图控制器仅响应当前方向它应该返回YES - 或者 - 只应查询由TabBarcontroller显示的视图控制器? – 2010-09-23 05:16:48

0

可以实现对创建在使用自定义标签栏使用的CGRect make.further码图像下面的代码是使用了创建自定义标签栏

-(void)applicationDidFinishLaunching:(UIApplication *)application { 

    // Add the tab bar controller's current view as a subview of the window 
    tabBarController.delegate = self; 
    tabBarController = [[UITabBarController alloc] init]; 

    mainDashBoard = [[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil]; 
    mainSearchView = [[SearchView alloc] initWithNibName:@"SearchView" bundle:nil]; 
    mainMoreView = [[MoreView alloc] initWithNibName:@"MoreView" bundle:nil]; 

    UINavigationController *nvCtr0 = [[[UINavigationController alloc] init] autorelease]; 
    UINavigationController *nvCtr1 = [[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease]; 
    UINavigationController *nvCtr2 = [[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease]; 
    UINavigationController *nvCtr3 = [[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease]; 
    UINavigationController *nvCtr4 = [[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease]; 

    tabBarController.viewControllers = [NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil]; 

    nvCtr0.tabBarItem.enabled = NO; 
    nvCtr4.tabBarItem.enabled = NO; 

    [window tabBarController.view]; 
} 
相关问题