高亮显示UIButton标题颜色 - 如何关闭它?

时间:2012-10-23 12:57:51

标签: ios uibutton title textcolor

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

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

但是没有效果。当我在我的代码中添加它时,按钮的标题似乎总是蓝色。

代码如下。

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);

问题解决了!

8 个答案:

答案 0 :(得分:53)

你可以使用

[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)];

答案 1 :(得分:28)

正如@null指出的那样,到目前为止,最简单的方法是将Interface Builder(或代码中)的按钮类型设置为" Custom"。

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

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

答案 2 :(得分:21)

0行代码:

使用Interface Builder和.XIB.storyboard,在IB中选择您的UIButton
查看>公用事业>显示属性检查器

选择状态配置(默认)为突出显示已选择已禁用之一并更改文字颜色属性。

Interface Builder solution

答案 3 :(得分:3)

有一些评论指出了这一点,但为了将其作为一个实际答案:

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

答案 4 :(得分:1)

对于更可重复使用的东西,你可以考虑这个,因为它没有违反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)]];

答案 5 :(得分:0)

我认为mayuur是对的。您尝试过另一种颜色而不是“darkTextColor”吗? As far as I know“darkTextColor”是一种特定于系统的颜色,用于在浅色背景上书写Text。如果mayuurs建议不起作用,也许尝试blackColor。

编辑:尝试在您的IBAction中添加:[sender setHighlighted:NO];,在按下按钮时调用。它解决了吗?我建议这样做是因为从[button release];我猜你还在运行旧版本的iOs SDK,你没有选择以优雅的方式禁用按钮的高亮显示。< / p>

Edit2:您正在以编程方式创建按钮,但我没有看到您将其与IBAction连接。 在[[UIButton alloc] init];

下方添加此项
[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];

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

- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */

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

答案 6 :(得分:0)

当心,如果按钮不是自定义类型,系统将忽略setTitleColor(_:for:)。

答案 7 :(得分:0)

您应该使用UIButtonTypeCustom而不是UIButtonTypeRoundedRect来初始化按钮