Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过BOOL选择的按钮集_Ios_Uibutton_Boolean - Fatal编程技术网

Ios 通过BOOL选择的按钮集

Ios 通过BOOL选择的按钮集,ios,uibutton,boolean,Ios,Uibutton,Boolean,有人能告诉我为什么下列方法不起作用吗?该按钮永远不会设置为“选定” [self.boldButton setSelected:isBold]; 如果我用If-else语句替换上面的语句,它就可以正常工作。我还可以将setSelected值更改为1或0,而不是YES或NO,它仍然可以正常工作 if (isBold) { [self.boldButton setSelected:YES]; } else { [self.boldButton setSelected:NO]; }

有人能告诉我为什么下列方法不起作用吗?该按钮永远不会设置为“选定”

[self.boldButton setSelected:isBold];
如果我用If-else语句替换上面的语句,它就可以正常工作。我还可以将setSelected值更改为1或0,而不是YES或NO,它仍然可以正常工作

if (isBold)
{
    [self.boldButton setSelected:YES];
}
else
{
    [self.boldButton setSelected:NO];
}
所以我有一个工作项目,但我不明白为什么这两个实现不能提供相同的结果。谢谢

FWIW-I用另一种方法测试粗体。虽然如果测试有缺陷,我不知道第二种方法如何工作,而第一种方法仍然没有

- (BOOL)isBold
{
    CTFontRef fontRef = (CTFontRef)CFBridgingRetain(self);
    CTFontSymbolicTraits symbolicTraits = CTFontGetSymbolicTraits(fontRef);
    return (symbolicTraits & kCTFontTraitBold);
}

BOOL
中定义如下:

这意味着
BOOL
实际上可以保存-128到127(包括)范围内的任何值

-[UIControl设置:
的工作原理大致如下:

#define kSelectedBitPosition 10
#define kSelectedBit (1 << kSelectedBitPosition)

- (void)setSelected:(BOOL)selected {
    if (((self->_controlFlags >> kSelectedBitPosition) & 1) == selected) {
        return;
    } else {
        self->_controlFlags = (self->_controlFlags & ~kSelectedBit)
            | ((selected & 1) << kSelectedBitPosition);
        [self setNeedsDisplay];
    }
}
但是,最好将
-isBold
方法改为返回“safe”
BOOL

- (BOOL)isBold {
    CTFontRef fontRef = (CTFontRef)CFBridgingRetain(self);
    CTFontSymbolicTraits symbolicTraits = CTFontGetSymbolicTraits(fontRef);
    return !!(symbolicTraits & kCTFontTraitBold);
}

BOOL
中定义如下:

这意味着
BOOL
实际上可以保存-128到127(包括)范围内的任何值

-[UIControl设置:
的工作原理大致如下:

#define kSelectedBitPosition 10
#define kSelectedBit (1 << kSelectedBitPosition)

- (void)setSelected:(BOOL)selected {
    if (((self->_controlFlags >> kSelectedBitPosition) & 1) == selected) {
        return;
    } else {
        self->_controlFlags = (self->_controlFlags & ~kSelectedBit)
            | ((selected & 1) << kSelectedBitPosition);
        [self setNeedsDisplay];
    }
}
但是,最好将
-isBold
方法改为返回“safe”
BOOL

- (BOOL)isBold {
    CTFontRef fontRef = (CTFontRef)CFBridgingRetain(self);
    CTFontSymbolicTraits symbolicTraits = CTFontGetSymbolicTraits(fontRef);
    return !!(symbolicTraits & kCTFontTraitBold);
}

什么是isBold?是否声明为
BOOL isBold=YES
?除非
isBold
是其他东西,否则这应该是有效的。什么是
isBold
?是否声明为
BOOL isBold=YES
?除非
isBold
是其他内容,否则这应该有效。谢谢您的详细回复。所以我认为if(isBold)else从有效的BOOL触发器开始工作,但得到的值不是0或1。这就是我的if-else语句工作的原因。是的,您的
if(isBold)
工作是因为C在
if
while
语句中将任何非零值视为true。谢谢您的详细回复。所以我认为if(isBold)else从有效的BOOL触发器开始工作,但得到的值不是0或1。这就是我的if-else语句工作的原因。是的,您的
if(isBold)
工作是因为C将
if
while
for
语句中的任何非零值视为true。