【问题标题】:UIButton title color change on highlight - How to turn it off?突出显示时 UIButton 标题颜色更改 - 如何将其关闭?
【发布时间】:2012-10-13 09:56:06
【问题描述】:

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

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

问题解决了!

【问题讨论】:

  • 这个按钮链接到什么方法?
  • 您想禁用突出显示的图像吗?在 Xib 文件中,取消选中“突出显示调整图像”。
  • 目前没有实现相关方法。
  • 在故事板中将按钮类型从“系统”更改为“自定义”。

标签: ios uibutton title textcolor


【解决方案1】:

我认为mayuur 是对的。您是否尝试过另一种颜色而不是“darkTextColor”? As far as I know "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];
}

【讨论】:

  • 按钮是否正确连接到 IBAction?您能否将 IBAction 添加到您的问题中?
  • 我在我的代码中创建了按钮,并使用[button addTarget:self action:@selector(continueButtonPressed) forControlEvents:UIControlEventTouchDown];
  • 我编辑了我的答案。我认为如果您使用“TouchDown”并快速点击它,您的方法将不会被调用。尝试改用“UIControlEventTouchUpInside”。
  • 我觉得你有点误会了。我的意思是按钮的标题颜色而不是按钮的颜色。所以我认为Highlighted没有业务。
  • 我也试过把事件改成UIControlEventTouchUpInside,但是好像没有效果
【解决方案2】:

你可以使用

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

【讨论】:

  • 当我添加这些代码时,标题总是变成深蓝色。我觉得这个颜色是UIButton的默认颜色,但是怎么改回来
  • 您可以避免键入或粘贴所有三行,只需编写[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted & UIControlStateNormal & UIControlStateSelected];
  • @WillAndrew 你如何在 Swift 中使用 & 这个东西?
  • 奇怪的是,现在还没有人注意到它,但是按位& 将返回 0 用于提到的代码,这意味着这与编写 UIControlStateNormal 完全相同。所需的位运算符是|: UIControlStateNormal | UIControlStateHighlighted | ...
  • 目前这是错误的。按钮为不同的状态值保存不同的颜色。例如 UIControlStateSelected | UIControlStateHightLightted 给出了一个具体的数值,但 UIControlStateSelected 给出了另一个具体的数值,因此,您应该为不同状态的 compositions 设置颜色
【解决方案3】:

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

【讨论】:

  • 我认为@WillAndrew 的评论看起来更好:[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted & UIControlStateNormal & UIControlStateSelected];
【解决方案4】:

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

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

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

【讨论】:

  • 您应该将 UIButton 类型从“系统”更改为“自定义”,它会这样做。
  • 但是如果你确实像@remus 所说的那样,在所有自定义内容之前,添加 [super setHighlighted:highlighted];
  • 但这会导致它短暂地“闪烁”
【解决方案5】:

0行代码:

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

选择 State Config(默认)到 Highlighted、Selected 或 Disabled 之一并更改 文本颜色属性。

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        你应该用UIButtonTypeCustom而不是UIButtonTypeRoundedRect来初始化你的按钮

        【讨论】:

          猜你喜欢
          • 2013-01-09
          • 1970-01-01
          • 1970-01-01
          • 2013-12-16
          • 1970-01-01
          • 2013-11-13
          • 2011-01-29
          • 1970-01-01
          相关资源
          最近更新 更多