UIsegmentedControl setTintColor奇怪的行为

我有一个UISegmentedControl包含3个select地图types的选项。 我将tintcolor设置为默认的黑色,我想为选定的段设置绿色。

这是分段控制的声明

NSArray *mapType = [NSArray arrayWithObjects: @"Map", @"Hyb", @"Sat", nil]; segmentedMapType = [[UISegmentedControl alloc] initWithItems:mapType] ; segmentedMapType.segmentedControlStyle = UISegmentedControlStyleBar ; segmentedMapType.tintColor = [UIColor blackColor]; segmentedMapType.frame = CGRectMake(100, 40, 120, 40); // segmentedMapType.momentary = YES; [[[segmentedMapType subviews]objectAtIndex:0] setTintColor:[UIColor colorWithRed:0 green:.6 blue:0 alpha:1]]; [segmentedMapType setSelectedSegmentIndex:0]; [segmentedMapType addTarget:self action:@selector(selectMap:) forControlEvents:UIControlEventValueChanged]; [mapSettingsView addSubview:segmentedMapType]; 

这里是select器方法

 -(void)selectMap:(id)sender { int index = [segmentedMapType selectedSegmentIndex]; UIColor *newSelectedTintColor = [UIColor colorWithRed: 0 green:.6 blue:0 alpha:1.0]; if (index==0) { [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:newSelectedTintColor]; [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:[UIColor blackColor]]; [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:[UIColor blackColor]]; } else if (index==1){ [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:newSelectedTintColor]; [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:[UIColor blackColor]]; [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:[UIColor blackColor]]; } else if (index==2) { [[[segmentedMapType subviews] objectAtIndex:0] setTintColor:newSelectedTintColor]; [[[segmentedMapType subviews] objectAtIndex:1] setTintColor:[UIColor blackColor]]; [[[segmentedMapType subviews] objectAtIndex:2] setTintColor:[UIColor blackColor]]; } } 

此代码适用于设备<iOS-5,但是> = iOS-5问题,这是绿色色彩不适用于正确的段或有时适用于任何段。 这段代码有什么问题? 任何帮助将不胜感激。

感谢这个问题。

如上所述,select索引不是一种可靠的方式来分配tintcolor。 我不得不存储他们的ID,并使用它们来分配tintcolor。 首先存储这些ID

 for (int i=0; i<3; i++) { //The most important trick to work, have to retain the subviews segment[i] = [[[segmentedMapType subviews] objectAtIndex:i] retain]; } 

然后使用它

 -(void)selectMap:(id)sender { int index = [segmentedMapType selectedSegmentIndex]; UIColor *newSelectedTintColor = [UIColor colorWithRed: 0 green:.7 blue:0 alpha:1.0]; for (int i=0; i<3; i++) { [segment[i] setTintColor:[UIColor blackColor]]; } int select = segmentedMapType.selectedSegmentIndex; [segment[select] setTintColor:newSelectedTintColor]; } 

由于某种原因,如果它是在viewDidLoad(或任何viewdDidAppear之前的任何地方)完成改变单色色调的颜色(甚至整个分段控制,不确定),直到你触摸控制。

从我所知道的是没有默认的方式来色调特定的分段索引色调颜色..你只能提供色彩整个分段作为一个整体。

尝试这个

http://www.framewreck.net/2010/07/custom-tintcolor-for-each-segment-of.html