【发布时间】:2017-03-05 21:41:57
【问题描述】:
我有一个继承自 UIControl 的自定义滑块。
对于我的控件,isEnabled 状态仍应允许触摸,但当我覆盖 isEnabled 时,似乎 UIControl 也将 isUserInteractionEnabled 设置为 false。
无论我做什么,我似乎都无法阻止这种情况。有什么想法,还是我坚持为我的州创建另一个名称(即isBypassed)?
class CustomSlider: UIControl {
private var _isEnabled: Bool = false
override public var isEnabled: Bool {
get { return _isEnabled }
set { setIsEnabled(newValue, animated: false }
}
public func setIsEnabled(_ isEnabled: Bool, animated: Bool) {
self._isEnabled = isEnabled
if animated {
//do the animation...
}
}
}
附:如果您想知道我为什么要这样做,那是因为被禁用的控件在被触摸时应该仍然能够识别自己:它会短暂亮起,但很快就会消失,表明需要启用它才能进行进一步的交互。
如果我想阻止所有用户交互,我会使用isUserInteractionEnabled。
【问题讨论】:
-
您能稍微扩展一下您所说的“识别自己”是什么意思吗?可能有另一种内置方法可以做到这一点,具体取决于它是什么。
-
谢谢。添加了更多信息。
-
您是否尝试过相反的方法?有人可能会争辩说禁用的控件是禁用的,但启用的控件应该能够识别自己,即使用户交互被关闭。您是否尝试过覆盖 isUserInteractionEnabled 而不是 isEnabled?
-
我有 3 个这样的滑块,当应用程序启动时它们都“变灰”。然后用户进入“启用控件模式”,并点击他们想要启用的滑块,然后将它们变为现实。所以(在我的情况下)'isEnabled' 似乎是更好的语义,因为用户仍然可以与禁用的控件交互。如果只是命名问题,我能想到的下一个最佳词是“isActivated”或“isActive”。