выбранный вопрос контроля за уйегментацией? - PullRequest
0 голосов
/ 30 декабря 2011

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

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

проблема в том, что цвет не был настроен должным образом. Если я выбираю третий индекс, цвет входит в первый индекс ...

Ответы [ 2 ]

0 голосов
/ 03 января 2012

NSInteger static compareViewsByOrigin (id sp1, id sp2, void * context)
{

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;

}

индексированный метод

int numSegments = [сегментDate.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];
}
0 голосов
/ 30 декабря 2011

Я могу ошибаться, но кажется, что вы не можете изменить цвет сегмента напрямую.Я обычно использую изображения для достижения этой цели.Попробуйте setImage:forSegmentAtIndex:.

Существует также пользовательский класс, который вы можете использовать, еще никогда не пробовал.См .: Пользовательский UISegmentedControl

...