高亮显示UIButton标题颜色 – 如何closures它?

我创build了一个button。 标题的颜色默认为黑色。 但是当我按下它的时候,颜色会变成蓝色,而且不会再变回来,这是怎么发生的? 谁能告诉我为什么? 我希望button的标题始终保持黑色。 我怎样才能做到这一点? 我努力了

[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted]; [button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected]; 

但是没有效果。 当我在我的代码中添加这个,看起来button的标题总是蓝色的。

代码如下。

 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setFrame:CGRectMake(20, 360, 280, 44)]; [button setTitle:NSLocalizedString(@"Continue", @"Label: TextLabel in Continue button") forState:UIControlStateNormal]; button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.0f]; button.titleLabel.textColor = [UIColor darkTextColor]; button.titleLabel.shadowColor = [UIColor blackColor]; button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth; [self.view addSubview:button]; [button release]; 

感谢大家。 我已经解决了这个问题。 我认为根本原因是

 button.titleLabel.textColor = [UIColor darkTextColor]; 

当我删除这个,并使用

 button setTitleColor:(UIColor) forState:(UIControlState); 

问题已经解决了!

您可以使用

[UIButton setTitleColor:forState:]

对于所有的州,那么所有州的标题颜色将保持相同。

 [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; 

注意:要避免键入或粘贴以上代码三次,您可以使用Will提出的以下代码,

 [button setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted | UIControlStateNormal | UIControlStateSelected)]; 

正如@null指出的,到目前为止,最简单的方法是将Interface Builder(或代码)中的buttontypes设置为“Custom”。

如果您需要使用标准button复制此行为,请覆盖setHighlighted方法以防止setHighlighted的Alpha通道也进行调整:

 - (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; self.titleLabel.alpha = 1.0; } 

0行代码:

使用Interface Builder和.XIB.storyboard ,在IB中select你的UIButton
视图>实用程序>显示属性检查器

select“ 状态configuration (默认)”为“ 突出显示” ,“ 选定”或“ 禁用”,然后更改“ 文本颜色”属性。

Interface Builder解决方案

对于更可重复使用的内容,您可能会考虑这一点,因为它不违反DRY原则。 将此添加为UIButton的一个类别。

 - (void)oka_setTitleColor:(UIColor *)color forStates:(NSArray *)states; { [states enumerateObjectsUsingBlock:^(NSNumber *state, NSUInteger idx, BOOL *stop) { [self setTitleColor:color forState:[state integerValue]]; }]; } 

您的案例的示例用法:

  [self oka_setTitleColor:[UIColor darkTextColor] forStates:@[@(UIControlStateNormal), @(UIControlStateHighlighted), @(UIControlStateSelected)]]; 

有几条评论指出了这一点,但为了把它作为一个实际的答案:

在故事板或代码中将buttontypes设置为Custom[UIButton buttonWithType:UIButtonTypeCustom];

我认为mayuur是对的。 你有尝试另一种颜色,而不是“darkTextColor”,但? 据我所知 “darkTextColor”是一个系统特定的颜色,用于写在浅色背景上的文字。 也许尝试blackColor,如果mayuursbuild议不起作用。

编辑:尝试添加: [sender setHighlighted:NO]; 进入你的IBAction,这被称为button按下。 它解决了吗? 我build议这是因为从[button release]; 我猜你还在运行一个老版本的iOs SDK,在那里你没有select禁用button的高亮显示。

编辑2:您正在编程创buildbutton,但我没有看到你连接它与IBAction。 在你的[[UIButton alloc] init];下面添加这个[[UIButton alloc] init];

 [button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside]; 

然后创build一个像这样的IBAction方法:

 - (IBAction)myIBAction:(UIButton *)sender; /* In Header File */ - (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */ [sender setHighlighted:NO]; }