高亮显示UIButton标题颜色 – 如何closures它?
我创build了一个button。 标题的颜色默认为黑色。 但是当我按下它的时候,颜色会变成蓝色,而且不会再变回来,这是怎么发生的? 谁能告诉我为什么? 我希望button的标题始终保持黑色。 我怎样才能做到这一点? 我努力了
[button setTitleColor:[UIColor darkTextColor] forState:UIControlStateHighlighted]; [button setTitleColor:[UIColor darkTextColor] forState:UIControlStateSelected];
但是没有效果。 当我在我的代码中添加这个,看起来button的标题总是蓝色的。
代码如下。
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);
问题已经解决了!
您可以使用
[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)];
正如@null指出的,到目前为止,最简单的方法是将Interface Builder(或代码)中的buttontypes设置为“Custom”。
如果您需要使用标准button复制此行为,请覆盖setHighlighted
方法以防止setHighlighted
的Alpha通道也进行调整:
- (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; self.titleLabel.alpha = 1.0; }
0行代码:
使用Interface Builder和.XIB
或.storyboard
,在IB中select你的UIButton
:
视图>实用程序>显示属性检查器 。
select“ 状态configuration (默认)”为“ 突出显示” ,“ 选定”或“ 禁用”,然后更改“ 文本颜色”属性。
对于更可重复使用的内容,您可能会考虑这一点,因为它不违反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)]];
有几条评论指出了这一点,但为了把它作为一个实际的答案:
在故事板或代码中将buttontypes设置为Custom
: [UIButton buttonWithType:UIButtonTypeCustom];
我认为mayuur是对的。 你有尝试另一种颜色,而不是“darkTextColor”,但? 据我所知 “darkTextColor”是一个系统特定的颜色,用于写在浅色背景上的文字。 也许尝试blackColor,如果mayuursbuild议不起作用。
编辑:尝试添加: [sender setHighlighted:NO];
进入你的IBAction,这被称为button按下。 它解决了吗? 我build议这是因为从[button release];
我猜你还在运行一个老版本的iOs SDK,在那里你没有select禁用button的高亮显示。
编辑2:您正在编程创buildbutton,但我没有看到你连接它与IBAction。 在你的[[UIButton alloc] init];
下面添加这个[[UIButton alloc] init];
[button addTarget:self action:@selector(myIBAction) forControlEvents:UIControlEventTouchUpInside];
然后创build一个像这样的IBAction方法:
- (IBAction)myIBAction:(UIButton *)sender; /* In Header File */ - (IBAction)myIBAction:(UIButton *)sender{ /* In Implementation File */ [sender setHighlighted:NO]; }