我正在尝试将UIButton
的{{1}}设置为某种颜色,当它被选中时以及突出显示时,我需要设置按钮在用户选择时触及titleColor
。
我已经这样设置了:
UIButton
但是当使用[button setTitleColor:normalColor forState:UIControlStateNormal];
[button setTitleColor:superDuperSpecialColor forState:UIControlStateHighlighted];
[button setTitleColor:superDuperSpecialColor forState:UIControlStateSelected];
[button addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventTouchDown];
在action:
方法中选中按钮时,它会将[senderButton setSelected:YES]
设置为titleColor
,而不是normalColor
,它应该是superDuperSpecialColor
是的,因为它都被突出显示并被选中。
注释setSelected:
调用会阻止按钮变为并保持选中状态,并且注释掉突出显示的状态颜色似乎没有任何效果。
我是否必须为UIControlEventTouchCancel
,UIControlEventTouchUpInside
和UIControlEventTouchUpOutside
添加目标,以便在突出显示结束后调用setSelected:
- 或者更改titleColor
当按钮触摸时UIControlStateNormal
到superDuperSpecialColor
?
在旁注中,我本来希望设置titleColor
,如此:
[button setTitleColor:superDuperSpecialColor
forState:(UIControlStateHighlighted | UIControlStateSelected)];
但这似乎不起作用。这是为什么? Objective-C是否检查状态等效性?
答案 0 :(得分:4)
我验证了你的结果,这似乎是iOS中的一个错误。它在模拟器和设备上都失败了(iOS 6.1)。似乎所选和突出显示的状态都是YES
,则所选设置应覆盖突出显示的设置。它主要以这种方式实现。按钮的文本值就像这样,但颜色似乎错了(默认为正常)。
如果您拥有最新的XCode,看看他们是否修复了此问题,您可能需要针对iOS 7进行尝试,否则将其报告为错误。
由于selected
不是UIButton
的常用状态,因此可能未与其他状态组合进行适当测试。
作为一种变通方法,在action
方法中,您可以将正常状态的颜色设置为superDuperSpecialColor
,并为修饰事件添加另一个操作,以将正常颜色设置为正常颜色。由于按下按钮时的状态实际上不应该是正常的,如果将来修复它,这不会破坏任何东西。
答案 1 :(得分:1)
对于选定状态和突出显示状态,还必须设置标题,而仅突出显示的状态标题取自正常状态。所以,不要忘记添加额外的行:
[button setTitleColor:UIColor.blackColor forState:UIControlStateSelected];
[button setTitleColor:[UIColor.blackColor colorWithAlphaComponent:0.5f]
forState:UIControlStateSelected | UIControlStateHighlighted];
[button setTitle:@"Title" forState:UIControlStateSelected];
[button setTitle:@"Title" forState:UIControlStateSelected | UIControlStateHighlighted];
下面的Сode工作正常,没有为突出显示状态明确设置标题:
[button setTitleColor:UIColor.greyColor forState:UIControlStateNormal];
[button setTitleColor:[UIColor.greyColor colorWithAlphaComponent:0.5f]
forState:UIControlStateHighlighted];
[button setTitle:@"Title" forState:UIControlStateNormal];
答案 2 :(得分:0)
我认为您需要在创建时检查UIButton
类型。我有这样的代码,工作正常。
但是将状态两个状态设置为一行并不适合我。
[button setTitleColor:superDuperSpecialColor
forState:(UIControlStateHighlighted | UIControlStateSelected)];