标签栏控制器自定义和“更多”问题

时间:2011-06-30 21:56:34

标签: iphone objective-c uitabbarcontroller customization

问题在于:

我自定义了标签栏控制器,因此标签项高亮显示为黄色而不是默认蓝色。错误的是“更多”项目出现是因为我有太多的标签项目(删除它们实际上不是一个选项),而这个“更多”仍然是蓝色。

我使用从互联网上获得的课程来实现自定义。这是代码:

// UITabBar + ColorExtensions.m

@implementation UITabBar (ColorExtensions)

- (void)recolorItemsWithColor:(UIColor *)color shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur
{

CGColorRef cgColor = [color CGColor];
CGColorRef cgShadowColor = [shadowColor CGColor];
for (UITabBarItem *item in [self items])
    if ([item respondsToSelector:@selector(selectedImage)] &&
        [item respondsToSelector:@selector(setSelectedImage:)] &&
        [item respondsToSelector:@selector(_updateView)])
    {
        CGRect contextRect;
        contextRect.origin.x = 0.0f;
        contextRect.origin.y = 0.0f;
        contextRect.size = [[item selectedImage] size];
        // Retrieve source image and begin image context
        UIImage *itemImage = [item image];
        CGSize itemImageSize = [itemImage size];
        CGPoint itemImagePosition; 
        itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width) / 2);
        itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height) / 2);
             UIGraphicsBeginImageContext(contextRect.size);
            CGContextRef c = UIGraphicsGetCurrentContext();

        // Setup shadow
        CGContextSetShadowWithColor(c, shadowOffset, shadowBlur, cgShadowColor);

        // Setup transparency layer and clip to mask
        CGContextBeginTransparencyLayer(c, NULL);
        CGContextScaleCTM(c, 1.0, -1.0);
        CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [itemImage CGImage]);

        // Fill and end the transparency layer
        CGContextSetFillColorWithColor(c, cgColor);
        contextRect.size.height = -contextRect.size.height;
        CGContextFillRect(c, contextRect);
        CGContextEndTransparencyLayer(c);

        // Set selected image and end context
        [item setSelectedImage:UIGraphicsGetImageFromCurrentImageContext()];
        UIGraphicsEndImageContext();

        // Update the view
        [item _updateView];
    }
}

@end

和控制器:

@implementation AATabBarController

- (void)viewDidLoad {
[super viewDidLoad];

// Put in a background
CGRect frame = CGRectMake(0.0, 0, self.view.bounds.size.width, 48);
backgroundView = [[UIView alloc] initWithFrame:frame];

[backgroundView setBackgroundColor:[UIColor colorWithRed:0.0
                                             green:0.0
                                              blue:0.0
                                             alpha:0.1]];
[self.tabBar insertSubview:backgroundView atIndex:0];
}

-(void)dealloc {
[backgroundView release];

[super dealloc];
}

-(void)updateTabColor:(UIColor *)color {
// Recolor the tab bar
[self.tabBar recolorItemsWithColor:color shadowColor:[UIColor blackColor] shadowOffset:CGSizeMake(0.0f, -1.0f) shadowBlur:3.0f]; 
}

-(void)updateBackgroundColor:(UIColor *)color {
// Update the background color
[backgroundView setBackgroundColor:color];
}

@end

有谁知道我应该做什么,所以“更多”标签项是自定义颜色?

1 个答案:

答案 0 :(得分:1)

该代码与this question中的代码非常相似。我知道你在这里问了一个不同的问题(链接的Q问“我的应用程序会被拒绝”,答案是“是”)。尽管如此,您使用的是相同的私有UITabBarItem方法,因此任何人都不可能给您一个可靠的答案。