#objective-c #xcode #uitabbarcontroller #uitabbaritem
#objective-c #xcode #uitabbarcontroller #uitabbaritem
Вопрос:
У меня есть четыре вкладки. Я смог изменить цвет значка вкладки с синего по умолчанию на красный (или, возможно, любой другой цвет), и это работает отлично. Проблема в том, что это работает только для трех элементов tabbaritems, и последний из них по умолчанию синий. Ниже приведен код. Я кодирую это в 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)] amp;amp;
[item respondsToSelector:@selector(setSelectedImage:)] amp;amp;
[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;
}
Ответ №1:
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
Ответ №2:
Спасибо, что поделились.
Но есть некоторые недостатки при развертывании на iPhone4 или iPod4 с дисплеем retina. Выбранный значок на панели инструментов будет меньше, чем невыбранный.
Итак, я хотел бы поделиться своим исправлением здесь:
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);
Если я ошибаюсь, пожалуйста, бесплатно сообщите мне об этом 🙂
Ответ №3:
нет проблем с самостоятельным добавлением элемента tabbar, я тестирую этот код для 4 элементов;
но ваш последний элемент панели вкладок — это системный элемент панели вкладок (элемент «….», «еще»), поэтому этот код, возможно, бесполезен для него; он просто не использует изображение, которое вы установили в;
Комментарии:
1. спасибо, чувак … я столкнулся с другой проблемой .. этот приведенный выше код работал только для одного приложения .. я попробовал этот же код в другом приложении, он не работает … если ты попробуешь это stuff.probably..in какое-нибудь другое приложение… и ответьте мне
Ответ №4:
@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