我有一个8段的分段控件。我可以更改整个控件的默认色调,但是我可以为控件中的每个段设置不同的颜色吗?我找到了一个在5.1中工作的教程,其中有一个调用此方法的新类,
-(void)setTintColor:(UIColor*)color forTag:(NSInteger)aTag{}
但它在iOS 6中不起作用。任何想法?
答案 0 :(得分:2)
此问题已在此处修复。由于格式问题,我无法粘贴源代码。 Sample code here.
编辑:添加了评论&来自链接和固定格式的代码。 〜OLIE
这是一个hacky修复。这会奏效。将您的代码放在ViewDidAppear中。这样就可以了。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
dispatch_async(dispatch_get_main_queue(), ^{
for (int i = 0 ; i < [segmentControl.subviews count] ; i++)
{
if ([[segmentControl.subviews objectAtIndex: i] isSelected] )
{
[[segmentControl.subviews objectAtIndex: i] setTintColor: [UIColor blackColor]];
break;
}
}
});
}
答案 1 :(得分:1)
您可以为每个细分设置不同的细分图像和颜色。对于颜色,您可以使用:
//get the subviews of the segmentedcontrol
NSArray *arri = [segmentedControl subviews];
//change the color of every subview(segment) you have
[[arri objectAtIndex:0] setTintColor:[UIColor redColor]];
[[arri objectAtIndex:1] setTintColor:[UIColor greenColor]];
希望能解决问题。
答案 2 :(得分:0)
你是对的...... iOS 6不支持分段控制的子视图....
我有另一种选择:
CGRect rect = CGRectMake(0, 0, 80, 44);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,
[[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[segment setImage:img forSegmentAtIndex:0];
您需要在项目中添加核心图形框架。
我们可以在索引处绘制段的图像....但是如果使用它,您将无法使用段标题添加文本。您还需要在上面使用的图像'img'上绘制文本。 如果你有任何其他方式,请分享。
答案 3 :(得分:0)
这是一个简单的解决方案,设置红色并与iOS 6兼容。
for ( UIView *segmentView in [segmentedControl subviews] ) {
if ( [segmentView respondsToSelector:@selector(setTintColor:)] ) {
[segmentView performSelector:@selector(setTintColor:)
withObject:[UIColor redColor]];
}
}
答案 4 :(得分:0)
UiSegmentedControl有一个属性'segmentedControlStyle'(在iOS7中已弃用),它会影响'tintColor'的行为
可能的风格是:
UISegmentedControlStylePlain,
UISegmentedControlStyleBordered,
UISegmentedControlStyleBar,
UISegmentedControlStyleBezeled,
但实际上在iOS6中'Bezeled'(已弃用)等于'Bar'
使用前两种样式无法更改已应用'tintColor',要自定义它,您需要使用以下内容更改每个片段的图像:
- (void)setImage:(UIImage *)image forSegmentAtIndex:(NSUInteger)segment;
通过这种方式,您将获得完全自定义的分段控件
但如果默认设计足以满足你的设计,你可以使用风格
UISegmentedControlStyleBar
并且'tintColor'属性将生效,您将获得一个彩色分段控件,根据所选的段应用色调以及让系统拨打它的所有其他好处。