2011-06-30 67 views
0

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

我有一个自定义标签栏控制器,标签项目的亮点是黄色的而不是默认的蓝色。有什么不对的是,“更多”项出现了,因为我有太多的标签项(删除它们并不是真正的选项),而这个“更多”仍然是蓝色的。

我使用从互联网上获得的类来实现自定义。下面是代码:

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

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