2011-12-30 69 views
0

我有一个uisegmentation控制三项。我想改变选择的指数 的颜色我实现选择uisegmentation控制问题?

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]]; 
     } 
} 

问题的颜色并没有设置properly.if我选择第三个索引颜色进来第一个指数...

+3

有了很多问题和答案,您肯定知道如何将代码格式化为代码。 – PengOne 2011-12-30 09:13:58

回答

0

NSInteger的静态compareViewsByOrigin(ID SP1,SP2的id,无效*上下文)
{

float v1 = ((UIView *)sp1).frame.origin.x; 
float v2 = ((UIView *)sp2).frame.origin.x; 
if (v1 < v2) 
    return NSOrderedAscending; 
else if (v1 > v2) 
    return NSOrderedDescending; 
else 
    return NSOrderedSame; 

}

indexchanged方法

INT numSegments = [segmentDate.subviews计数]。

// 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]; 
} 
0

我可能是错误的,但看起来你不能直接改变段的颜色。我通常使用图像来实现这一点。尝试setImage:forSegmentAtIndex:

还有一个可以使用的自定义类,从来没有尝试过。参见:Custom UISegmentedControl

+0

从iOS5开始,您可以使用'setBackgroundImage:forState:barMetrics:'。可能比为每个片段创建两个图像更容易。 – 2011-12-30 11:16:50