UIButton setTitle:forState:问题

时间:2010-12-06 20:08:19

标签: iphone objective-c cocoa-touch uikit

为什么以下代码有效:

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];

虽然没有:

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted|UIControlStateDisabled];

3 个答案:

答案 0 :(得分:29)

我知道这是一个老问题,但这些答案都不正确。

当您单独设置每个属性时,您说state属性应为UIControlStateHighlightedUIControlStateDisabled但不是两者

当你按位或它们在一起时,你说明它们必须同时设置在state属性中。含义UIControlStateHighlightedUIControlStateDisabledstate属性中设置。

下面的示例代码完美地说明了我的观点。如果你不同意自己运行它。

[button setTitle:@"highlighted and selected" forState:UIControlStateHighlighted | UIControlStateSelected];
[button setTitle:@"Highlighted only" forState:UIControlStateHighlighted];
[button setTitle:@"Selected only" forState:UIControlStateSelected];
[button setTitle:@"Normal" forState:UIControlStateNormal];

NSLog(@"Normal title: %@", [[button titleLabel] text]); // prints title: Normal

[button setSelected:YES];

NSLog(@"Selected title: %@", [[button titleLabel] text]); // prints title: Selected only 

[button setSelected:NO];
[button setHighlighted:YES];

NSLog(@"highlighted title: %@", [[button titleLabel] text]); // prints title: Highlighted only

[button setSelected:YES];

NSLog(@"highlighted and selected title: %@", [[button titleLabel] text]); // prints title: highlighted and selected

答案 1 :(得分:2)

因为setTitleColor:forState:方法只能接受已知的UIControlState,并且您正在将两个UIControlState值进行ORing。

每个UIControlState(处于低级别)很可能是一个简单的整数常量。

<强>更新

这是一个位掩码,这使得它更加奇怪,它不起作用,但我的观点仍然存在。 (尽管它偏向一侧并且危险地摇摆不定。)

答案 2 :(得分:-1)

这可能是一个错误。尝试更改具有意外值的位掩码,例如UIControlStateHighlighted&amp; UIControlStateDisabled,它使所有的状态颜色都相同。