2010-03-24 5 views
2

в соответствии с этим post на данный момент, это яблоко также отклонит этот код?Как изменить UITabbar выбранный цвет?

и как реализовать то, что яблоко одобрит?

@interface UITabBar (ColorExtensions) 
- (void)recolorItemsWithColor:(UIColor *)color shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur; 
@end 

@interface UITabBarItem (Private) 
@property(retain, nonatomic) UIImage *selectedImage; 
- (void)_updateView; 
@end 

@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 
+0

Да, Apple отвергает его .. любое решение ?? – Frade

ответ

5

Да, Apple будет отклонить приложение, если вы используете этот код.

У меня просто было отклонено приложение для использования частных вызовов API. В частности, «_updateView». И я использовал тот же самый код, что и выше.

(Если другие люди говорят, что их приложение получило утверждены с тем же кодом, что это только потому, что он не был проверен на использование частных API.)

+0

Да, Apple отвергает его .. любое решение ??? любая помощь будет оценена. Спасибо – Frade

+0

Если вы разрабатываете для iOS 5+, вы можете использовать методы 'outer' для настройки панели вкладок. Перед iOS 5 Обычно я создавал изображения для каждого состояния панели вкладок (т. Е. Если есть три элемента, мне нужно три изображения: по одному для каждого выбранного элемента) и поместить изображение поверх всей панели вкладок. Поиск «настраиваемой панели вкладок» должен привести к множеству примеров. –

+0

Спасибо, Дженс! Я уже сделал это;) надеюсь, что яблоко примет это. – Frade

0

Я предлагаю вместо того чтобы изменить цвет, почему бы вам не использовать выбранные tabbaritem изображение, как в IOS 6 у меня изменить выбранный tabbatitem изображение как -

в контроллер TabBar метод делегата

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

через это вы можете изменить свой образ.

Или вы можете использовать непосредственно на вашем взгляд контроллеры инициализации методы (или ViewWillAppear), как

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
3
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]]; 
+0

где вы это положили? Во всех представлениях были загружены элементы контроллеров представления элементов панели вкладок или в делегате приложения или где-то еще? – TimWhiting

+0

это используется в методе didFinishLaunchingWithOptions делегата приложения – TimWhiting

0

для прошивки 10 (или выше):

Для установки выбранного цвета просто установить:

let tabBarAppearace = UITabBar.appearance() 
tabBarAppearace.tintColor = UIColor.nowYouBlue 

Выше будет работать на всех версиях IOS поддерживаемых в настоящее время, но изменить невыбранный цвет:

if #available(iOS 10.0, *) { 
     tabBarAppearace.unselectedItemTintColor = UIColor.red 
    } else { 
     // Fallback on earlier versions 
    } 

Приведенный выше код будет выглядеть следующим образом на прошивкой 10.

enter image description here

Смежные вопросы