UISegmentedControl с настраиваемым цветом: ошибка линии разделителя

Легко изменить цвет 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]];     
}

Итак, он создает это:

first image

Очень хорошо, затем я нажимаю Вариант 2

second

Ого, это именно то, что я хочу, поэтому щелкните Вариант 3

problem

Теперь проблема, эта глупая синяя линия (отмечена красным квадратом) между Вариант 1 и Вариант 2 . Если я снова нажму на Вариант 1 , у меня будет:

boring

Затем синяя линия появится снова. Это означает, что каждая левая сторона старого сегмента (но не первого) будет иметь эту синюю линию. Если я иду справа налево, этого не происходит.

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

5
задан Community 23 May 2017 в 12:00
поделиться