2017-03-05 64 views
1

我有一個自定義滑塊,從UIControl繼承。覆蓋isEnabled在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

+0

你能通過「標識自己」來擴大你的意思嗎?可能有另一種內置的方式來實現,取決於它是什麼。 –

+0

謝謝。增加了更多信息。 – MH175

+0

你有沒有嘗試過相反的?有人可能會爭辯說禁用了禁用控件,但即使用戶交互關閉,啓用的控件也應該能夠識別自身。你有沒有嘗試覆蓋* isUserInteractionEnabled *而不是* isEnabled *? – dfd

回答

0

我能想到的唯一方法是將滑塊設置爲灰色0.5 alpha(您可以調整alpha使其看起來像禁用)。

此外,創建一個BOOL屬性,以確定其狀態(啓用/禁用)

因此,當用戶觸摸滑塊它仍然會迴應valueChanged:(你給它任何選擇)