2011-12-30 2 views
0

У меня есть контроль над уровнем сложности с тремя элементами. я хочу, чтобы изменить цвет выбранного индекса я реализуюВыбранный вопрос управления усегментацией?

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 я выбирающий третий индекс цвета приходит в 1-е индекса ...

+3

С таким количеством вопросов и ответов, которые у вас были, вы знаете, как форматировать код как «код». – PengOne

ответ

0

NSInteger статический compareViewsByOrigin (ID sp1, ID sp2, пустота * контекст)
{

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:' тоже. Наверное, проще создать два изображения для каждого сегмента. –

Смежные вопросы