如何在UISegmentedControl中为禁用的段设置背景图像

时间:2015-05-12 10:09:53

标签: ios objective-c iphone swift uisegmentedcontrol

我试图在UISegmentedControl中将颜色设置为禁用的段。但尚未成功。我想知道如果可以在UISegmentedControl中为禁用的段设置背景图像。

我已尝试过以下代码,但它无效:

NSDictionary *attrs = @{ UITextAttributeTextColor : [UIColor lightGrayColor] };
[self.controlStatus setTitleTextAttributes:attrs forState:UIControlStateDisabled];

[self.controlStatus setBackgroundImage:[[UIImage imageNamed:@"img.png"] retain] forState:UIControlStateDisabled barMetrics:nil];

前两行正在运行。我可以在禁用时设置颜色,但不能设置背景图像或背景颜色。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

更新:您必须按以下方式执行此操作。

[[UISegmentedControl appearance] setBackgroundImage:[UIImage imageNamed:@"SegmentViewDisabled"]
                                    forState:UIControlStateDisabled
                                    barMetrics:UIBarMetricsDefault];

如果您将分隔线图像设置为禁用状态,看起来您将遇到来自Apple端的错误,但找到here

-------------------以下不起作用--------------------

你可以这样做。其中SegmentViewDisabled是图像资产目录中的图像资源。

[self.controlStatus setBackgroundImage:[UIImage imageNamed:@"SegmentViewDisabled"] forState:UIControlStateDisable barMetrics:UIBarMetricsDefault];

答案 1 :(得分:0)

UISegmentControl在两个段之间有一个分隔符。通过使用以下代码,您可以更改分隔符背景。

[segmentedCtrl setDividerImage:[UIImage imageNamed:@"divider_selected.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedCtrl setDividerImage:[UIImage imageNamed:@"divider_normal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

答案 2 :(得分:0)

如果您需要自定义分段控件的外观而不是标准着色,您可以考虑使用自定义图像。由于分段控件具有不同的纵向和横向设备方向度量标准,因此请记住为每组度量标准指定适当的图像。

您可以使用backgroundImageForState:barMetrics:方法为分段控件的每个控件状态设置背景图像。您还应为左右段状态的每个组合指定分隔符图像,以使选定或突出显示的段与正常状态中的段具有不同的外观,如下所示:

image1,image2,image3是不同的图像

    [mySegmentedControl setDividerImage:image1 forLeftSegmentState:UIControlStateNormal  rightSegmentState:UIControlStateNormal barMetrics:barMetrics];

    [mySegmentedControl setDividerImage:image2 forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:barMetrics];

    [mySegmentedControl setDividerImage:image3 forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:barMetrics];

Source