等一下!!!:
我知道你可能认为这个问题之前已经被问答多次了。但是我可以保证,这个问题是独一无二的。
问题:
在一个iOS应用程序中,想象一下有两个按钮,就像下面的图片所示,它们有两个动作,类似于切换逻辑。
它的逻辑可能如下:
- (IBAction)testBtnClicked:(id)sender {
if ([self.testBtn isEnabled]) {
[self.testBtn setEnabled:NO];
[self.setInteractionBtn setUserInteractionEnabled:YES];
} else {
[self.testBtn setEnabled:YES];
[self.setInteractionBtn setUserInteractionEnabled:NO];
}
}
- (IBAction)setInteractionBtnClicked:(id)sender {
if ([self.setInteractionBtn isEnabled]) {
[self.setInteractionBtn setUserInteractionEnabled:NO];
[self.testBtn setEnabled:YES];
} else {
[self.setInteractionBtn setUserInteractionEnabled:YES];
[self.testBtn setEnabled:NO];
}
}
因此,我认为setEnabled
方法和setUserInteractionEnabled
方法之间没有太大的区别。它们的行为类似于一个阻止用户使用的单个方法。然而,如果它们非常相似,那么即使将setUserInteractionEnabled
设置为False
,我们怎么能检测isEnabled
的状态是true
还是false
呢?
以下是使这个问题与SO中另一个Q&A线程不可能重复的原因:
- 尽管一些高排名的代码可能已经将我的问题标记为可能重复,但那个Q&A并没有给我正确的理解。
- 正如@danh所说的那样:
至少有一个原因是在动画期间,在UIView上禁用了用户交互。当控件在动画时以灰色显示时是错误的。因此,在动画期间,这两个属性具有不同的含义。
这给了我真正的答案或者是理由来看到这两个方法是为了两个不同的原因。因为任何人都可以说setUserInteractionEnabled
不会改变UI状态,但只有@danh的答案首先指出它可能隐式地在UI动画期间使用。