Как изменить цвет значка вкладки по умолчанию синий? - PullRequest
7 голосов
/ 27 апреля 2011

У меня есть четыре вкладки.Мне удалось изменить цвет значка вкладки с синего на красный по умолчанию (или, возможно, любой цвет), и он отлично работает.Проблема в том, что он работает только для трех вкладок, а последний по умолчанию синий.Ниже приведен код.Я кодирую это в rootviewcontrollerAppDelegate.m Вы можете попробовать это, вставив приведенный ниже код в ваш appdelegate.Не могли бы вы, ребята, помочь мне, я был бы так рад!

@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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions 
{    

    [[tabBarController tabBar] recolorItemsWithColor:[UIColor redColor] shadowColor:[UIColor blackColor] shadowOffset:CGSizeMake(0.0f, -1.0f) shadowBlur:3.0f];

    [self.window addSubview:tabBarController.view];

        [self.window makeKeyAndVisible];

        [self addTabBarArrow];

         return YES;
}

enter image description here

Ответы [ 5 ]

8 голосов
/ 25 февраля 2013
 [[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
3 голосов
/ 01 июня 2011

Спасибо, что поделились.

Но есть некоторые недостатки при развертывании на iPhone4 или iPod4 с дисплеем сетчатки. Выбранный значок в tarBar будет меньше, чем невыбранный.

Итак, я хотел бы поделиться своим исправлением здесь:

CGSize orginalSize = [[item selectedImage] size];
double scaleFactor = 1;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    scaleFactor = [[UIScreen mainScreen] scale];
}
    contextRect.size = CGSizeMake(orginalSize.width*scaleFactor, orginalSize.height*scaleFactor);

// Retrieve source image and begin image context
UIImage *itemImage = [item image];
double imageScale = 1;
if ([itemImage respondsToSelector:@selector(scale)]) {
    imageScale = itemImage.scale;
}
CGSize itemImageSize = CGSizeMake(itemImage.size.width*imageScale, itemImage.size.height*imageScale);

Если я ошибаюсь, пожалуйста, дайте мне знать:)

2 голосов
/ 18 мая 2011

нет проблем для самостоятельного добавления элемента вкладки, я тестирую этот код для 4 элементов;

, но ваш последний элемент панели вкладок является системным элементом вкладки (элемент "...." "подробнее")так что этот код может быть бесполезен для него;его просто не использовать изображение вашего набора в;

0 голосов
/ 26 января 2016

перейдите в папку с активами, найдите актив и нажмите Identity Inspector и измените «Render As» на «Original Image»

enter image description here

0 голосов
/ 09 ноября 2012
@implementation MoreViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        self.title = @"More";
        self.tabBarItem.image=[UIImage imageNamed:@"more.png"]; // here more.png is Yellow Image
    }
    return self;
}

//.......
@end
...