如何在uitabbarcontroller中更改uitabbaritem的默认灰色?

时间:2011-01-05 13:29:49

标签: iphone ios4

在tabbarcontroller应用程序中,所有取消选择的图像选项卡都是灰色,我想将其更改为白色。

任何帮助都会感激!

3 个答案:

答案 0 :(得分:4)

您需要构建自己的控制器。根据关于此问题的Apple文档“此类[UITabBarController]不用于子类化”。 UITabBarItem上的文档说明当您为标签栏提供图像时“标签栏上显示的图像来自此图像”。因此,无论您提供给标签栏的任何图像都会被操纵,以使其符合标签栏图像的“正常”外观。

因此,您可以使用一些UIButtons构建一个UIViewController作为子视图,然后以这种方式管理整个外观。

恕我直言,这似乎是为了获得很多收益而做的很多工作。

答案 1 :(得分:0)

查看https://github.com/xhan/PlutoLand并运行它。

你可以找到一个自定义PLTabBarController类,它允许你在那里自定义TabBarItems。

答案 2 :(得分:0)

您可以从UITabBar继承并覆盖drawRect方法。下面是一个如何用棕色着色的样本

- (void)drawRect:(CGRect)rect 
{
    // Drawing code
    float baseComponents[] = { 78 / 255.0, 30 / 255.0, 0/ 255.0, 1.0 };

    // Get current context
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Fill full rectangle
    CGContextSetRGBFillColor(context, baseComponents[0], baseComponents[1], baseComponents[2], baseComponents[3]);
    CGContextFillRect(context,rect);

    // Draw light line on top
    CGContextSetRGBStrokeColor(context, baseComponents[0] + (67/255.0), baseComponents[1] + (67/255.0), baseComponents[2] + (67/255.0),  baseComponents[3]);
    CGContextMoveToPoint(context, 0, 1);
    CGPoint points[] = { CGPointMake(0,1.5),CGPointMake(rect.size.width,1.5) };
    CGContextStrokeLineSegments(context, points , 2);

    // Create gradient
    CGColorSpaceRef myColorspace;
    CGGradientRef myGradient;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { baseComponents[0] + (46/255.0), baseComponents[1] + (46/255.0), baseComponents[2] + (46/255.0),  baseComponents[3],  // Start color
    baseComponents[0] + (21/255.0), baseComponents[1] + (21/255.0), baseComponents[2] + (21/255.0),  baseComponents[3] }; // End color

    myColorspace = CGColorSpaceCreateDeviceRGB();
    myGradient = CGGradientCreateWithColorComponents (myColorspace, components,locations, num_locations);

    // Draw gradient
    CGContextDrawLinearGradient(context, myGradient, CGPointMake(0, 2), CGPointMake(0,rect.size.height/2), 0);

    // Clean up
    CGColorSpaceRelease(myColorspace);
    CGGradientRelease(myGradient);

}

在Interface Builder中,在Identity Inspector中为UITabBarController的TabBar设置自定义类。