UIButton - 触摸时保持文本黑色
Posted
技术标签:
【中文标题】UIButton - 触摸时保持文本黑色【英文标题】:UIButton - Keep text black when touched 【发布时间】:2011-09-10 00:08:58 【问题描述】:我有一个带有背景图像和文本的 iPhone UIButton(自定义)。
触摸时,图像变暗(良好),但文本从设置的黑色变为白色。
如何使文本保持相同的黑色,以便在触摸按钮时,只有图像会改变颜色。
【问题讨论】:
【参考方案1】:大多数时候,下面的行就可以了:
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
如果什么都没有发生,那么使用这个:
[button setTitleColor:[UIColor blackColor] forState:(UIControlStateSelected | UIControlStateHighlighted | UIControlStateNormal)];
或者这样可以解决问题:
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
请参阅下面的 cmets 了解此答案已被编辑/扩展为包括 2 条单独的行的原因。
【讨论】:
为什么会被接受?它行不通。按下按钮只会打开突出显示的状态。除非您明确指示按钮,否则按钮不会进入选定状态。 这样,如果他明确指示按钮进入选中状态,颜色将保持黑色。或者,他可以继承 UIButton 并以 obj-c 最初应该具有的方式实现选定状态。 =p 但这并没有解决最初的问题,即如何在他触摸按钮时保持文本不变色。如果按钮同时被选中和突出显示,您的答案只会设置文本颜色。 Objective-C Operators and Expressions - Bitwise Operators。来自 UIControl.hUIControlStateHighlighted = 1 << 0
和 UIControlStateSelected = 1 << 2
的定义。如果只有 1 并且同时设置了两个状态,则按位 OR 应该使它成为黑色的标题颜色。
不,只有当 both 状态都被设置时它才会变黑。仅仅因为您使用按位 OR 来组合它们并不能赋予“状态 a OR 状态 b”的含义。本质上,这种情况下的按位 OR 对应于逻辑 AND。【参考方案2】:
[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted]
【讨论】:
【参考方案3】:okButton.titleLabel.textColor = [UIColor redColor];
[okButton addTarget:self action:@selector(isPressingForgetButton:) forControlEvents:UIControlEventTouchDown];
[okButton addTarget:self action:@selector(didPressForgetButton:) forControlEvents:UIControlEventTouchUpInside];
- (void) isPressingForgetButton:(id)sender
UIButton * bt = (UIButton *)sender;
bt.titleLabel.textColor = [UIColor greenColor];
- (void) didPressForgetButton:(id)sender
UIButton * bt = (UIButton *)sender;
bt.titleLabel.textColor = [UIColor redColor];
[self gotoUnblockView];
【讨论】:
以上是关于UIButton - 触摸时保持文本黑色的主要内容,如果未能解决你的问题,请参考以下文章