Search code examples
iosobjective-cxcodecocoa-touchuislider

Limit sliding UISlider past certain point


Let's assume a have a UISlider to which I set a certain value. The slider handle then moves to that value, as expected.

Now I want to let the user slide the handle of the slider back and forth, but to not set the value of the UISlider to be less, than I assigned to it programmatically.

So for example I have a UISlider with a min value of 0 and a max value of 100 and I set its value to be 50. I don't want the user to slide "lefter" than 50 but on the "right" of it I want to let the user slide the handle back and forth.

How do you implement this sort of behaviour in Obj-C?


Solution

  • You should first make sure the updates event are sent continuously:

    mySlider.continuous = YES;
    

    You can also do that in your storyboard/nib (as mentionned by @fDmitry, this is the default state in IB).

    Then you have to link your slider to an IBAction in your .h file (create a link by ctrl-dragging from IB to your code), and assign it to the "Value Changed" event of your slider. This will create a method like this:

    -(IBAction)sliderValueChanged:(id)sender;
    

    Implement it that way:

    - (IBAction)sliderValueChanged:(id)sender {
    
        float maxValue = 50.0f;
    
        if ([(UISlider*)sender value] > maxValue) {
            [(UISlider*)sender setValue:maxValue];
        }
    }