UISegmentedControl 段顺序问题

UISegmentedControl segment order issue

我正在使用以下代码设置 UISegmentedControl 中每个段的颜色。

for (int i = 0; i < [self.controlStatus numberOfSegments]; i++)
    {
        NSArray *ar=self.controlStatus.subviews;

        if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"ON"])
        {
            [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor greenColor]];
        }
        else if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"OFF"])
        {
            [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor orangeColor]];
        }
        else if ([[self.controlStatus titleForSegmentAtIndex:i] isEqualToString:@"HIDE"])
        {
            [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor redColor]];
        }
        }
    }

但是我在相应的片段中没有得到我需要的颜色。有时颜色如下:
第 1 段 - 绿色
第二段 - 橙色
第 3 段 - 红色

但在某个阶段,当我导航到其他页面并返回时,颜色会发生变化:
第 1 段 - 红色
第二段 - 橙色
第 3 段 - 绿色

任何人都可以告诉我这里发生了什么。

UISegmentedControl 上没有 public 方法来单独更改每个段的背景颜色。

而且您不能轻松地使用图像,因为片段可以有图像或标题,但不能同时有。

您可以通过在具有圆角和边框线的 UIView 容器中使用 rect UIButtons 来还原以制作您自己的分段控件:

- (void)setBorderWidth:(CGFloat)_borderWidth color:(UIColor *)_borderColor cornerRadius:(CGFloat)_cornerRadius
{
    CALayer *layer = self.layer;

    layer.borderWidth = _borderWidth;
    layer.borderColor = _borderColor.CGColor;
    layer.cornerRadius = _cornerRadius;
    layer.masksToBounds = (_cornerRadius > 0.0);
}

我找到了解决办法。它会满足我的需要..

    if(Status==0)
    {
        [self.controlStatus setSelectedSegmentIndex:0];
        [self.controlStatus setEnabled:FALSE forSegmentAtIndex:1];
        for (int i = 0; i < [self.controlStatus numberOfSegments]; i++)
        {
            if ([[self.controlStatus.subviews objectAtIndex:i] isSelected])
            {
                [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor greenColor]];
            }
        }
    }
    else if(Status==1)
    {
        [self.controlStatus setSelectedSegmentIndex:1];
        for (int i = 0; i < [self.controlStatus numberOfSegments]; i++)
        {
            if ([[self.controlStatus.subviews objectAtIndex:i] isSelected])
            {
                [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor orangeColor]];
            }
        }
    }
    else if(Status==2)
    {
        [self.controlStatus setSelectedSegmentIndex:2];
        for (int i = 0; i < [self.controlStatus numberOfSegments]; i++)
        {
            if ([[self.controlStatus.subviews objectAtIndex:i] isSelected])
            {
                [[self.controlStatus.subviews objectAtIndex:i] setTintColor:[UIColor redColor]];
            }
        }

    }

我已经在要设置 SelectedSegmentIndex 的地方编写了这段代码。