等等!!!:
我知道你可能认为这个问题已经被问过好几次了。但我可以向你保证,这个问题是独一无二的。
问题:
在 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
方法之间有很大的区别。它们的行为就像一个阻止用户不让使用它的单一方法。但是,如果它是相同的,我们如何能够检测到isEnabled
true
甚至false
何时setUserInteractionEnabled
设置为False
?
以下是使这个问题不可能与 SO 中的另一个问答线程重复的原因:
- 尽管一些排名靠前的代码可能已将我的问题标记为可能重复,但 Q&A 并没有给我正确的理解。
- 正如@danh 所说,
至少一个原因是在动画期间,UIViews 上禁用了用户交互。控件在动画时将自己绘制为灰色是错误的。所以至少在动画期间,这两个属性有不同的含义。
给我真正的答案或理由,看看这两种方法有两个原因。因为任何人都可以说这setUserInteractionEnabled
不会对 UI 状态进行更改,但至少只有在 @danh 的回答首先表明它可能会在 UI 动画期间隐式使用。