Objective c 如何更改选定的文本颜色?
可能重复:Objective c 如何更改选定的文本颜色?,objective-c,uitabbar,tabbar,uitabbaritem,Objective C,Uitabbar,Tabbar,Uitabbaritem,可能重复: 你好, 我正在用Objective C为iPhone编程。我希望在脉冲时更改选项卡栏项目的文本颜色。这可能吗 多谢各位 尊敬。要做到这一点,您必须覆盖UITabBarController类,但如果您是新手,我不会在这方面做出任何努力。在iOS开发中,最好了解一下,因为你的应用程序最终会被苹果审查为批准/拒绝。将此添加到你的应用程序代理文件中- @interface UITabBar (ColorExtensions) - (void)recolorItemsWithColor:
你好, 我正在用Objective C为iPhone编程。我希望在脉冲时更改选项卡栏项目的文本颜色。这可能吗 多谢各位
尊敬。要做到这一点,您必须覆盖UITabBarController类,但如果您是新手,我不会在这方面做出任何努力。在iOS开发中,最好了解一下,因为你的应用程序最终会被苹果审查为批准/拒绝。将此添加到你的应用程序代理文件中-
@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]);
//Setup the gradient...
//CGFloat components[8] = {0.0,0.4,1.0,0.2,0.0,0.6,1.0,1.0};
//CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//CGGradientRef colorGradient = CGGradientCreateWithColorComponents(colorSpace, components, NULL, 2);
//CGContextDrawLinearGradient(c, colorGradient,CGPointZero,CGPointMake(0,contextRect.size.height),0);
// 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];
}
}
然后,您可以在应用程序中为选项卡栏添加颜色,并使用以下代码完成启动-
[[tabbarcontroller tabBar] recolorItemsWithColor:[UIColor colorWithRed:0.6640 green:0.1992 blue:0.1992 alpha:1.0] shadowColor:[UIColor clearColor] shadowOffset:CGSizeMake(0.0f, -1.0f) shadowBlur:3.0f];
谢谢你的回复。这项功能也是需要实现的,但我喜欢更改选项卡栏图标下项目中显示的文本的颜色。这可能吗?谢谢你。它看起来很棒,但我无法让它工作-控制台给出了错误,例如“CGContextSetStyle:invalid context 0x0”。有什么想法吗?