[英]Why doesn't my UIButton's selected property set correctly?
我真的很茫然:
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
屬性,並且可能存儲為帶signed char
而不是1位字段。
這不是為按鈕分配布爾YES或NO:
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser);
您正在將按位操作的結果分配給按鈕。 因此,([[SO2Settings設置] .drawMode和SO2DrawModeEraser)為零或非零值。 對於零值,它將作為布爾NO也為0起作用。但是對於不等於1的非零值,它與布爾YES(等於1)不同。 測試將給出布爾結果,但是賦值是不同的。
例如:
int x = 2;
BOOL y;
...
if(x == 2)
y = YES;
與...不同
y = x; /* x is 2 */
您應該使用以下行檢查非零結果(非布爾值),然后向按鈕返回布爾值YES。
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode & SO2DrawModeEraser)? YES : NO;
還是您要使用此功能:
kMenu.eraserButton.selected = ([SO2Settings settings].drawMode && SO2DrawModeEraser);
注意邏輯與的“ &&”而不是按位與。
這可能是愚蠢的,但我要說的只是為了確保:在第一行中,您是否只是檢查對象是否已初始化?
NSString *st = [NSString stringWithFormat:@"something"];
NSLog(@"%@",st ? @"YES":@"NO");
...仍會打印YES
但這並不意味着其值為YES。
只是檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.