MultiSlider icon indicating copy to clipboard operation
MultiSlider copied to clipboard

How to restrict dragging on condition

Open kishanbarmawala opened this issue 2 years ago • 5 comments

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

kishanbarmawala avatar Jun 22 '22 06:06 kishanbarmawala

You can disable some of the thumbs:

slider.disabledThumbIndices = [1, 3]

Would that help?

yonat avatar Jun 22 '22 06:06 yonat

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.

kishanbarmawala avatar Jun 22 '22 11:06 kishanbarmawala

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.

yonat avatar Jun 23 '22 10:06 yonat

Hey, Thanks for the response.

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

kishanbarmawala avatar Jun 23 '22 11:06 kishanbarmawala

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]
    }

yonat avatar Jun 23 '22 16:06 yonat