yonat / MultiSlider

UISlider clone with multiple thumbs and values, range highlight, optional snap intervals, optional value labels, either vertical or horizontal.
MIT License
494 stars 113 forks source link

How to restrict dragging on condition #88

Closed kishanbarmawala closed 1 year ago

kishanbarmawala commented 2 years ago

Hello, I've used Multi slider in my project. But now I what to restrict the dragging of sliders for a particular user.

So what I want is, I want to check a condition before starting dragging.

Is there any way to do such thing?

Thanks in advance

yonat commented 2 years ago

You can disable some of the thumbs:

slider.disabledThumbIndices = [1, 3]

Would that help?

kishanbarmawala commented 2 years ago

Thanks for the quick response. I've seen the same code in documentation.

But in my case, I have a different scenario. Can you please go through my code?

multislider.addTarget(self, action: #selector(sliderDragged), for: .touchUpInside)
@objc private func sliderDragged() {
    // draging code
}

What I want is, when we try to slide the slider, we do not have to slide the that and along with that I have to show some alert message. And I have multiple users so some of the users have to access the slider and some do not have to slide that slider.

Please let me know if you didn't get what I am saying.

yonat commented 2 years ago

Hmmm. You can disable the thumb for some users but not others. As for the message, I personally don't like UX that tells the user "you did something that is not allowed". It's better to just disable/hide any control they can't control.

So if I was in your place, I would go to the product owner and suggest disabling instead of showing a "you did wrong" message.

You could save the unmovable value, and then:

@objc private func sliderDragged() {
    if notAllowedToDrag {
        slider.value = frozenValue
        presentScoldingMessage()
    }
}

But this is not good UX, disabling seems better.

kishanbarmawala commented 2 years ago

Hey, Thanks for the response.

I've tried your code and the slider still sliding after assigning a frozen value. No luck!

yonat commented 2 years ago

Really? Did you change isContinuous?

Because it works for mw when I add the following to the Example project:

    @objc func sliderChanged(_ slider: MultiSlider) {
        slider.value = [3]
    }