我真的无语了:
DDLogVerbose(@"%@", ([SO2Settings settings].drawMode & SO2DrawModeEraser) ? @"YES" : @"NO");
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser);
DDLogVerbose(@"%@", kMenu.eraserButton);
DDLogVerbose(@"%@", kMenu.eraserButton.selected ? @"YES" : @"NO");
产生这个输出
详细 2012-08-05 16:21:05.391 | 是
详细 2012-08-05 16:21:05.391 | < UIButton: 0x6cfa380; 帧 = (187 10; 59 59); 不透明=否;标签 = 3; 层 = < CALayer: 0x6c37cc0>>
详细 2012-08-05 16:21:05.391 | 不
显然,selected
应该是的值YES
,但它是NO
......这里发生了什么?
奇怪的更新:下面的代码产生了一个非常令人不安的结果:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.selected = 8;
btn.enabled = 8;
NSLog(@"Button is selected : %@, Button is enabled : %@", btn.selected ? @"YES" : @"NO", btn.enabled ? @"YES" : @"NO");
选择按钮:否,启用按钮:是
最后更新:忘记 C 标准的东西,因为BOOL
它实际上是一个signed char
. 但是,我想我知道启用有效但选择无效的原因。在标头中,似乎UIControl
使用了一个位域,该位域具有以下区域selected
(这是一个 1 位域)。如果它是奇数,它可以正常工作,但偶数则不能。所以插入时数字必须为0或1。 enabled
是一个实际BOOL
属性,可能存储为 asigned char
而不是 1 位字段。