gpt4 book ai didi

objective-c - 为什么我的 UIButton 的 selected 属性设置不正确?

转载 作者:行者123 更新时间:2023-11-29 13:31:20 24 4
gpt4 key购买 nike

我真的无语了:

DDLogVerbose(@"%@", ([SO2Settings settings].drawMode & SO2DrawModeEraser) ? @"YES" : @"NO");
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser);
DDLogVerbose(@"%@", kMenu.eraserButton);
DDLogVerbose(@"%@", kMenu.eraserButton.selected ? @"YES" : @"NO");

产生这个输出

Verbose 2012-08-05 16:21:05.391 | YES
Verbose 2012-08-05 16:21:05.391 | < UIButton: 0x6cfa380; frame = (187 10; 59 59); opaque = NO; tag = 3; layer = < CALayer: 0x6c37cc0>>
Verbose 2012-08-05 16:21:05.391 | NO

显然,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");

Button is selected : NO, Button is enabled : YES

上次更新:忘掉 C 标准吧,因为 BOOL 实际上是一个 signed char。但是,我想我知道为什么 enabled 有效但 selected 无效的原因。在 header 中,UIControl 似乎使用了一个位域,该位域具有诸如 selected 之类的区域(这是一个 1 位域)。如果它是奇数,它可以正常工作,但偶数则不能。所以插入时数字必须为0或1。 enabled 是一个实际的 BOOL 属性,可能存储为 signed char 而不是 1 位字段。

最佳答案

这不是为按钮分配 bool 值 YES 或 NO:

kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser);

您正在将按位运算的结果分配给按钮。因此,([SO2Settings settings].drawMode & SO2DrawModeEraser) 是零值或非零值。对于零值,它将起作用,因为 bool 值 NO 也为 0。但是对于不等于 1 的非零值,它与 bool 值 YES(等于 1)不同。测试会给出 bool 结果,但赋值不同。

例如:

int x = 2;
BOOL y;
...
if(x == 2)
y = YES;

不一样

y = x;    /* x is 2 */

您应该使用以下行来检查非零结果(不是 bool 值)并将 bool 值 YES 返回给按钮。

kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser)? YES : NO;

或者你的意思是使用这个:

kMenu.eraserButton.selected = ([SO2Settings settings].drawMode && SO2DrawModeEraser);

请注意“&&”表示逻辑与而不是按位与。

关于objective-c - 为什么我的 UIButton 的 selected 属性设置不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com