44

我创建了一个按钮。默认情况下,标题的颜色为黑色。但是当我按下它时,颜色变成了一点蓝色,并且再也没有变回来,这是怎么回事?谁能告诉我为什么?我希望按钮的标题一直保持黑色。我怎样才能做到这一点?我试过了

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

问题已经解决了!

4

8 回答 8

54

您可以使用

[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)];
于 2012-10-23T13:27:17.017 回答
30

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

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

- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    self.titleLabel.alpha = 1.0;
}
于 2014-06-04T23:50:30.437 回答
27

0行代码:

使用 Interface Builder 和.XIB或,在 IB.storyboard中选择您的: View > Utilities > Show Attributes InspectorUIButton

将State Config (Default)选择为HighlightedSelectedDisabled之一,然后更改Text Color属性。

界面生成器解决方案

于 2015-04-01T06:38:45.040 回答
4

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

Custom在情节提要或代码 中将按钮类型设置为:[UIButton buttonWithType:UIButtonTypeCustom];

于 2016-06-28T19:14:00.397 回答
2

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

于 2019-11-19T15:10:42.143 回答
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)]];
于 2013-05-14T09:58:15.927 回答
0

我认为mayuur是对的。您是否尝试过另一种颜色而不是“darkTextColor”?据我所知, “darkTextColor”是一种系统特定的颜色,用于在浅色背景上书写文本。如果 mayuurs 的建议不起作用,也许可以试试 blackColor。

编辑:尝试将:添加[sender setHighlighted:NO];到您的 IBAction 中,该按钮在按下按钮时调用。它解决了吗?我建议这样做是因为[button release];我猜您仍在运行旧版本的 iOs SDK,并且除此之外,您无法以优雅的方式禁用按钮的突出显示。

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];
}
于 2012-10-23T13:06:04.780 回答
0

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

于 2020-09-17T11:06:30.993 回答