UISegmentedControl段订单问题

时间:2015-05-06 06:09:07

标签: ios objective-c uisegmentedcontrol

我使用以下代码设置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段 - 绿色

任何人都可以告诉我这里发生的事情。

2 个答案:

答案 0 :(得分:0)

UISegmentedControl上没有公共方法可以单独更改每个网段的背景颜色。

你不能轻易使用图片,因为一个片段可以有一个图像或一个标题,但不能两者都有。

您可以通过在带有圆角和边框线的UIView容器中使用rect UIButton来恢复自己的分段控件:

- (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);
}

答案 1 :(得分:-1)

我找到了解决方案。它符合我的需要..

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

    }

我已经将这段代码写入了我想要setSelectedSegmentIndex。