UISegmentedControl值更改时如何仅更改文本颜色?

时间:2014-09-29 11:23:26

标签: ios objective-c iphone uisegmentedcontrol

我在我的应用中使用UISegmentedControl,我可以在更改状态时切换文字颜色。但默认情况下,所选片段包含不同的色调,如图像

enter image description here

当它处于选定状态时,我不希望有不同的色调颜色。我只想区分选定的片段,只能使用文字颜色,如下图所示。

enter image description here

我知道这是一个愚蠢的问题,但其他类似的问题都没有给我一个正确的答案。

你能指导我实现这个目标吗?

感谢您的期待!

4 个答案:

答案 0 :(得分:1)

这就够了。

 NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [UIFont boldSystemFontOfSize:17], UITextAttributeFont,
                                    [UIColor blackColor], UITextAttributeTextColor,
                                    nil];
        [_segment setTitleTextAttributes:attributes forState:UIControlStateNormal];
        NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor];
        [_segment setTitleTextAttributes:highlightedAttributes forState:UIControlStateHighlighted];

如果要在分段更改时更改颜色

- (IBAction)horseSegmentChanged:(UISegmentedControl*)sender {

        if (sender.selectedSegmentIndex == 0) {


            NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                        [UIFont boldSystemFontOfSize:17], UITextAttributeFont,
                                        [UIColor blackColor], UITextAttributeTextColor,
                                        nil];
            [_segment setTitleTextAttributes:attributes forState:UIControlStateNormal];
            NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor];
            [_segment setTitleTextAttributes:highlightedAttributes forState:UIControlStateHighlighted];

        } else if (sender.selectedSegmentIndex == 1) { // selected shared blogs



        }


     }

答案 1 :(得分:1)

我强烈建议不要这样做。

你意识到这只会让你更难使用吗?对于一个色盲人(大约十一个男人是colourblind),你的版本几乎不可能使用。对于视力不佳的人来说,使用起来非常困难。可用性的最佳测试(以及Apple工程师的建议)是将其转换为灰度图像,看看是否仍然可以使用它。

例如......

部分色调

enter image description here

...变为

enter image description here

在所选索引上使用对比色文本可以改善这一点。

您的配色方案

enter image description here

...变为

enter image description here

很难确定选择哪个部分。

答案 2 :(得分:0)

找到以下自定义细分控件

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface CustomSegmentControl : UISegmentedControl

@end

#import "CustomSegmentControl.h"
@interface CustomSegmentControl ()
- (UIImage *)imageWithColor:(UIColor *)color;

@end
@implementation CustomSegmentControl

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    [self setBackgroundImage:[[UIImage imageNamed:@"img.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [self setBackgroundImage:[[UIImage imageNamed:@"img.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
}

@end

这将解决您的问题

答案 3 :(得分:0)

我同意Fogmeister的说法,就可用性而言,这可能不是一个好主意。也就是说,UISegmentedControl允许您为特定状态设置背景图像。您可以为每个UISegmentedControl状态设置相同颜色的图像,这样可以获得您想要的效果。

要以编程方式从UIColor创建图像,请参阅here

一些带有始终为白色背景的分段控件的示例代码(考虑到上面引用的UIImage类别):

[self.segmentedControl setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];