覆盖在UIControl中的isEnabled仍允许触摸

时间:2017-03-05 21:41:58

标签: ios swift uicontrol

我有一个继承自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...
        }
    }

}

P.S。如果你想知道为什么我想要这个,那是因为一个被禁用的控件仍然能够在触摸时识别它自己:它会短暂亮起然后快速消失,表明它需要被启用才能进一步交互。

如果我想阻止所有用户互动,我会使用isUserInteractionEnabled

1 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是使用0.5 alpha将滑块设置为灰色(您可以调整alpha以使其看起来像禁用)。

此外,创建一个BOOL属性以标识其状态(活动/非活动)

因此,当用户触摸滑块时,它仍会响应valueChanged:(无论您选择哪个选择器)