2011-12-30 22 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