我在我的应用中使用UISegmentedControl
,我可以在更改状态时切换文字颜色。但默认情况下,所选片段包含不同的色调,如图像
当它处于选定状态时,我不希望有不同的色调颜色。我只想区分选定的片段,只能使用文字颜色,如下图所示。
我知道这是一个愚蠢的问题,但其他类似的问题都没有给我一个正确的答案。
你能指导我实现这个目标吗?
感谢您的期待!
答案 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工程师的建议)是将其转换为灰度图像,看看是否仍然可以使用它。
例如......
部分色调
...变为
在所选索引上使用对比色文本可以改善这一点。
您的配色方案
...变为
很难确定选择哪个部分。
答案 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];