簡體   English   中英

為什么我的UIButton的selected屬性設置不正確?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM