等等!!!:
我知道你可能会认为这个问题已经被问过几次了.但我可以向你保证,这个问题是独一无二的.
问题:
在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动画中隐式使用.
danh.. 13
它们几乎相同.userInteractionEnabled
是UIView
切换视图是否接收任何用户触摸的属性. enabled
是UIControl
(的子类UIView
和超类的子类UIButton
)的属性,具有相同的效果.一个区别是UIKit控件可能会根据它们的enabled
状态而有所不同,这与摘要不同UIView
.
好的,那为什么呢?
由于UIControl
子类继承了两者,为什么有两个几乎相同的属性?为什么不控制只是放弃"启用"的想法,并根据他们的userInteractionEnabled
状态不同地绘制自己?
至少有一个原因是在动画期间,UIView
s 上禁用了用户交互.控件在动画时将自己画成灰色是错误的.所以至少在动画期间,这两个属性具有不同的含义.
它们几乎相同.userInteractionEnabled
是UIView
切换视图是否接收任何用户触摸的属性. enabled
是UIControl
(的子类UIView
和超类的子类UIButton
)的属性,具有相同的效果.一个区别是UIKit控件可能会根据它们的enabled
状态而有所不同,这与摘要不同UIView
.
好的,那为什么呢?
由于UIControl
子类继承了两者,为什么有两个几乎相同的属性?为什么不控制只是放弃"启用"的想法,并根据他们的userInteractionEnabled
状态不同地绘制自己?
至少有一个原因是在动画期间,UIView
s 上禁用了用户交互.控件在动画时将自己画成灰色是错误的.所以至少在动画期间,这两个属性具有不同的含义.