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 的地方编写了这段代码。
我正在使用以下代码设置 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 的地方编写了这段代码。