我创建了一个按钮。标题的颜色默认为黑色。但是当我按下它时,颜色会变成蓝色,再也不会变回来,这是怎么发生的?谁能告诉我为什么?我希望按钮的标题始终保持黑色。我怎样才能做到这一点?我试过了
[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);
问题解决了!
答案 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)
使用Interface Builder和.XIB
或.storyboard
,在IB中选择您的UIButton
:
查看>公用事业>显示属性检查器。
选择状态配置(默认)为突出显示,已选择或已禁用之一并更改文字颜色属性。
答案 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
来初始化按钮