2012-10-23 74 views
33

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

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

的问题就解决了!

+1

这个按钮链接到什么方法? – esqew

+0

你想禁用突出显示的图像吗?在Xib文件中,取消选中“高亮调整图像”。 – mayuur

+0

到目前为止,我没有实现相关的方法。 – NewXcoder

回答

52

可以使用

[UIButton的setTitleColor:forState:]

所有各州的标题颜色将保持相同。

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

注意:要avoide键入或粘贴上面的代码,你可以使用下面的威尔建议码三次,

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

当我添加这些代码时,标题总是变成深蓝色。我认为这种颜色是UIButton的默认颜色,但它怎样才能改回 – NewXcoder

+15

你可以通过简单地写'[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted&UIControlStateNormal&UIControlStateSelected]来避免键入或粘贴所有三行:' –

+1

@WillAndrew你如何在Swift中使用'&'东西? – IIllIIll

0

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

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

编辑2:您正在编程创建按钮,但我没有看到您将它与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]; 
} 
+0

我试过了,但它似乎不起作用!也谢谢 – NewXcoder

+0

按钮是否正确连接到IBAction?你可以在你的问题中添加IBAction吗? –

+0

我在我的代码中创建按钮,并使用[button addTarget:self action:@selector(continueButtonPressed)forControlEvents:UIControlEventTouchDown]; – NewXcoder

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)]]; 
+1

的我觉得@ WillAndrew的评论看起来更好:[按钮setTitleColor:[的UIColor redColor] forState :UIControlStateHighlighted&UIControlStateNormal&UIControlStateSelected]; – JakubKnejzlik

21

由于@null指出,目前要做到这一点最简单的方法是设置按钮式界面生成器(或者代码)“自定义”。

如果需要复制用标准按钮此问题,重写setHighlighted方法以防止titleLabel的alpha通道从调节太:代码

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

您应该将UIButton类型从“系统”更改为“自定义”,它将做到这一点。 – null

+0

嘿....你知道的越多! – brandonscript

+0

但是,如果你喜欢@remus说,在所有的自定义内容之前,添加[super setHighlighted:高亮显示]; – StinkyCat

19

0行:

使用界面Builder和.XIB.storyboard,请在IB中选择您的UIButton
查看>工具>显示属性Inspector

选择国家配置(默认值),以突出的之一,选择残疾人,改变文本颜色属性。

Interface Builder solution

2

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

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