按钮有许多以枚举值表示的状态。您在这里拥有的只是其中的两个:
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
所以,我们通常使用按位或运算符来组合这些标志:
0000 0001 | 0000 0010 = 0000 0011
最后,当组合这些标志并将它们发送到设置标题的方法时,您是在告诉底层实现在单个方法调用中更改这两个选项的标题。
...
至于关于代码不起作用的第二个问题,描述“不起作用”的含义会很有用。它会崩溃吗?您想要的输出是什么?
编辑:
我刚刚阅读了 cmets,这个答案似乎还有一些问题需要解决:
为了实用地改变按钮的状态,你应该调用类似的东西:
[sender setEnabled:NO];
您刚才的代码告诉按钮在它变为禁用状态后显示该文本。
关于|| 运算符的另一个问题,当然是OR 运算,而不是按位或。此运算符用于布尔表达式而不是按位运算。