更改所选段控件的颜色

在我的应用程序中,我能够改变所选段控件的颜色。但是颜色被改变为另一个索引而不是选定的索引。 我可以在索引中find任何错误。

帮我!

我的代码如下:

if([SegmentRound selectedSegmentIndex] == 0) { UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; FLAGROUND=1; } if([SegmentRound selectedSegmentIndex] == 1) { UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor0]; UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor2]; FLAGROUND=2; } if([SegmentRound selectedSegmentIndex] == 2) { UIColor *newSelectedTintColor0 = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:2] setTintColor:newSelectedTintColor0]; UIColor *newSelectedTintColor2 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:0] setTintColor:newSelectedTintColor2]; UIColor *newSelectedTintColor1 = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; [[[SegmentRound subviews] objectAtIndex:1] setTintColor:newSelectedTintColor1]; FLAGROUND=3; } 

viewWillAppear中:

 [SegmentRound setSelectedSegmentIndex:0]; 

我build议在您的条件之外创build两种颜色,使您的代码更小一点。 然后你可以使用foreach遍历你的段:

 UIColor *selectedColor = [UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; UIColor *deselectedColor = [UIColor colorWithRed: 54/255.0 green:52/255.0 blue:48/255.0 alpha:1.0]; for (UIControl *subview in [SegmentRound subviews]) { if ([subview isSelected]) [subview setTintColor:selectedColor]; else [subview setTintColor:deselectedColor]; } 

看看这一个

 -(IBAction)segmentBtnPressed:(UISegmentedControl*)sender{ for (int i=0; i<[sender.subviews count]; i++) { if ([[sender.subviews objectAtIndex:i]isSelected] ) { UIColor *tintcolor=[UIColor colorWithRed: 98/255.0 green:156/255.0 blue:247/255.0 alpha:1.0]; [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; } else{ UIColor *tintcolor=[UIColor colorWithRed:127.0/255.0 green:161.0/255.0 blue:183.0/255.0 alpha:1.0]; [[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; } } } 

你也可以在这里查看更多的答案UISegmentedControlselect的段颜色

我希望你可以简单地改变段控制的TintColor。 这对我来说是完美的。

我试图在控制台上打印段控制的子视图,我发现索引是相反的顺序,意思是如果selectedSegment为0,那么你的子视图应该是2不是0.试着在控制台上打印段控制,你会看到相同的结果如下行动。:

 NSArray *theArr = [mSegmentedControl subviews]; DEBUGLOG(@"controls arr: %@",theArr); 

login控制台:

 controls arr: ( "<UISegment: 0x8598ad0; frame = (77 0; 76 34); opaque = NO; layer = <CALayer: 0x8598b30>>", "<UISegment: 0x85986e0; frame = (0 0; 76 34); opaque = NO; layer = <CALayer: 0x8598740>>" )