2011-06-30 65 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方法,所以任何人都不可能給你一個可靠的答案。