按钮有许多表示为枚举值的状态。您在这里拥有的只是其中两个:
UIControlStateSelected|UIControlStateDisabled
整个列表在UIControl.h
:
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0,
UIControlStateHighlighted = 1 << 0, // used when UIControl isHighlighted is set
UIControlStateDisabled = 1 << 1,
UIControlStateSelected = 1 << 2, // flag usable by app (see below)
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
};
那么这是什么意思?正如您在枚举定义中所见,设置为枚举的值是每个值的单个设置位。所以,这里是上面的二进制表示:
1 << 0 = 0000 0001 b
1 << 1 = 0000 0010 b
.. and so on
如您所见,<<
是一个移位运算符,我们只是将位向左移动,以便我们可以将这些枚举组合到一个变量中!我是什么意思?这里:
0000 0011 b // This is essentially two flags set, on for the highlighted state one for the disabled
因此,我们通常使用按位 OR 运算符来组合这些标志:
0000 0001 | 0000 0010 = 0000 0011
最后,当组合这些标志并将它们发送到设置标题的方法时,您是在告诉底层实现在单个方法调用中更改这两个选项的标题。
...
至于您关于不起作用的代码的第二个问题,描述“不起作用”的含义会很有用。它会崩溃吗?您正在寻找的期望输出是什么?
编辑:
我刚刚阅读了评论,这个答案似乎还需要解决一些问题:
为了务实地改变按钮的状态,你应该调用类似的东西:
[sender setEnabled:NO];
您刚刚编写的代码告诉按钮在更改为禁用状态后显示该文本。
关于运算符的另一个问题||
,当然是 OR 运算,而不是按位 OR。此运算符用于布尔表达式而不是按位运算。