在UISegmentedControl中,如何将正常颜色与所选颜色分开?

时间:2014-12-11 01:56:17

标签: ios cocoa-touch uisegmentedcontrol

这就是我想要的效果:

enter image description here

这是我到目前为止所做的:

enter image description here

Cocoa不允许您为每个片段设置图标和文本,因此我被迫将文本刻录到图像中:

self.segmentedControl = [[UISegmentedControl alloc] initWithItems:@[
    [UIImage imageNamed:@"segmentedControlContacts"],
    [UIImage imageNamed:@"segmentedControlOtherApps"]
]];

我必须完成的最后一件事是使正常(未选定)段灰色而不是其选定的/浅蓝色。以下不起作用:

// themeColor is defined as a shade of blue in a category
[UIView appearance].tintColor = [UIColor themeColor];
[[UISegmentedControl appearance] 
    setBackgroundImage:[UIImage imageNamed:@"segmentedControlEdgeNormal"] 
    forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] 
    setBackgroundImage:[UIImage imageNamed:@"segmentedControlEdgeSelected"] 
    forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] 
    setTitleTextAttributes:@{
        NSForegroundColorAttributeName: [UIColor grayColor]
    } 
    forState:UIControlStateNormal
];

1 个答案:

答案 0 :(得分:1)

该行

[[UISegmentedControl appearance] setTitleTextAttributes:@{
        NSForegroundColorAttributeName: [UIColor grayColor]
    } 
    forState:UIControlStateNormal
];

仅适用于分段控制的标题。如果你从段中删除图像并为这两个段添加标题,那肯定会有效。

这不会对分段控制的图像产生影响。

对于图像自定义,您必须使用方法:

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

它也不会像你期望的那样显示色彩。

<强>建议:

如果您仍然坚持要做出自定义行为,我建议保留段控件而不是创建两个按钮并将它们并排放置,以感觉像一个段控件。

对于该行为,您需要灰色图像作为按钮背景并更改为备用按钮事件。