Iphone 选定的分段控制问题?
我有一个包含三个项目的uisegmentation控件。我想更改所选索引的颜色 我正在实施Iphone 选定的分段控制问题?,iphone,objective-c,uisegmentedcontrol,Iphone,Objective C,Uisegmentedcontrol,我有一个包含三个项目的uisegmentation控件。我想更改所选索引的颜色 我正在实施 segmentDate = [[UISegmentedControl alloc] initWithItems:newDateArray]; segmentDate.frame = CGRectMake(8,07,300,30); segmentDate.segmentedControlStyle = UISegmentedControlStyleBar; se
segmentDate = [[UISegmentedControl alloc] initWithItems:newDateArray];
segmentDate.frame = CGRectMake(8,07,300,30);
segmentDate.segmentedControlStyle = UISegmentedControlStyleBar;
segmentDate.selectedSegmentIndex = 0;
segmentDate.tintColor=[UIColor purpleColor];
[segmentDate addTarget:self action:@selector(indexChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:segmentDate];
-(IBAction) indexChanged:(id) sender
{
for( int i=0;i<[segmentDate numberOfSegments];i++)
{
if (i==segmentDate.selectedSegmentIndex) {
[[[segmentDate subviews] objectAtIndex:i] setTintColor:[UIColor blueColor]];
}
else
{
[[[segmentDate subviews] objectAtIndex:i] setTintColor:[UIColor purpleColor]];
}
}
问题是颜色设置不正确。如果我选择第三个索引,则颜色将出现在第一个索引中…我可能是错误的,但您似乎无法直接更改线段的颜色。我通常使用图像来实现这一点。请尝试setImage:forSegmentAtIndex:
还有一个自定义类可以使用,但从未尝试过。请参阅:NSInteger静态比较ViewByOriginID sp1、id sp2、void*上下文 { } 指数交换法 int numSegments=[segmentDate.subviews count]
// Reset segment's color (non selected color)
for( int i = 0; i < numSegments; i++ ) {
// reset color
[[segmentDate.subviews objectAtIndex:i] setTintColor:nil];
[[segmentDate.subviews objectAtIndex:i] setTintColor:[UIColor purpleColor]];
}
// Sort segments from left to right
NSArray *sortedViews = [segmentDate.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];
// Change color of selected segment
[[sortedViews objectAtIndex:segmentDate.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:((c & 0xff0000) >> 16)/255.0 green:((c & 0xff00) >> 8)/255.0 blue:(c & 0xff)/255.0 alpha:2.0]];
// Remove all original segments from the control
for (id view in segmentDate.subviews) {
[view removeFromSuperview];
}
// Append sorted and colored segments to the control
for (id view in sortedViews) {
[segmentDate addSubview:view];
}
有了这么多的问题和答案,您肯定知道如何将代码格式化为代码。从iOS5开始,您可以使用setBackgroundImage:forState:barMetrics:too。可能比为每个片段创建两个图像更容易。
// Reset segment's color (non selected color)
for( int i = 0; i < numSegments; i++ ) {
// reset color
[[segmentDate.subviews objectAtIndex:i] setTintColor:nil];
[[segmentDate.subviews objectAtIndex:i] setTintColor:[UIColor purpleColor]];
}
// Sort segments from left to right
NSArray *sortedViews = [segmentDate.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];
// Change color of selected segment
[[sortedViews objectAtIndex:segmentDate.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:((c & 0xff0000) >> 16)/255.0 green:((c & 0xff00) >> 8)/255.0 blue:(c & 0xff)/255.0 alpha:2.0]];
// Remove all original segments from the control
for (id view in segmentDate.subviews) {
[view removeFromSuperview];
}
// Append sorted and colored segments to the control
for (id view in sortedViews) {
[segmentDate addSubview:view];
}