Легко изменить цвет UISegmentedControl. Я нашел различные решения, такие как этот , этот сайт и лучшее это решение . Но ни одно не было тем, что мне нужно.
Я попытался создать простую вещь и это работает очень просто, это был мой код: (я использую iOS 4.2, а не 5.0 и xcode 4.0.2)
id segment[3];
UISegmentedControl *segmentedControl;
- (id)init
{
NSArray *itens = [NSArray arrayWithObjects: @"Option 1", @"Option 2", @"Option 3", nil];
segmentedControl = [[UISegmentedControl alloc] initWithItems:itens];
[segmentedControl setFrame:CGRectMake(0, 0, 500, 30)];
[segmentedControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segmentedControl addTarget:self
action:@selector(segmentedControl:)
forControlEvents:UIControlEventAllEvents];
switch (type) {
case type1: [segmentedControl setSelectedSegmentIndex:0]; break;
case type2: [segmentedControl setSelectedSegmentIndex:1]; break;
case type3: [segmentedControl setSelectedSegmentIndex:2]; break;
}
for (int i=0; i<3; i++) {
//The most important trick to work, have to retain the subviews
segment[i] = [[[segmentedControl subviews] objectAtIndex:i] retain];
}
[self changeColor];
[self addSubview:segmentedControl];
return self;
}
- (void)segmentedControl:(id)sender
{
//do some thing
[self changeColor];
}
- (void)changeColor{
for (int i=0; i<3; i++) {
[segment[i] setTintColor:[UIColor lightGrayColor]];
}
int select = segmentedControl.selectedSegmentIndex;
[segment[select] setTintColor:[UIColor blueColor]];
}
Итак, он создает это:
Очень хорошо, затем я нажимаю Вариант 2
Ого, это именно то, что я хочу, поэтому щелкните Вариант 3
Теперь проблема, эта глупая синяя линия (отмечена красным квадратом) между Вариант 1
и Вариант 2
. Если я снова нажму на Вариант 1
, у меня будет:
Затем синяя линия появится снова. Это означает, что каждая левая сторона старого сегмента (но не первого) будет иметь эту синюю линию. Если я иду справа налево, этого не происходит.
Я понятия не имею, как это решить. Как я могу получить доступ к этой строке и изменить свой цвет? Или мне придется использовать другие коды. Может быть, у них будет такая же проблема ...