2013-04-24 174 views
3

我们假设有一个UISlider我设置了一定的值。如预期的那样,滑块手柄将移动到该值。限制滑动UISlider过去某个点

现在我想让用户来回滑动滑块的手柄,但不要将UISlider的值设置得比我以编程方式分配的值小。

因此,例如我有一个UISlider最小值为0,最大值为100,我将它的值设为50.我不希望用户滑动“lefter”而不是50,而是在“正确“,我想让用户来回滑动手柄。

你如何在Obj-C中实现这种行为?

回答

12

你应该首先确认更新事件连续发送:

mySlider.continuous = YES; 

你也可以做,在你的情节提要/笔尖(由@fDmitry作为mentionned,这是IB默认状态)。

然后,您必须将滑块链接到.h文件中的IBAction(通过从IB拖动到代码创建链接),并将其分配给滑块的“Value Changed”事件。这将创建一个方法是这样的:

-(IBAction)sliderValueChanged:(id)sender; 

实现这样的说法:

- (IBAction)sliderValueChanged:(id)sender { 

    float maxValue = 50.0f; 

    if ([(UISlider*)sender value] > maxValue) { 
     [(UISlider*)sender setValue:maxValue]; 
    } 
} 
+0

我是否错误,或IB的UISliders默认连续? – dmee3 2013-04-24 12:46:12

+3

他们是。我加了它以防万一。也许他在搜索解决方案时试图点击任何地方,并且意外地禁用了它:p – rdurand 2013-04-24 12:48:09

+0

@rdurand我没有,但感谢通知,先生!公认! – 2013-04-24 13:10:32

2

这个人是很容易的,其实:)

创建行动并将其指定为选择器UISlider的行动的valueChanged。在该方法中,执行一个简单检查: 如果滑块的值小于50,则将其设置为50.

如果您需要任何进一步帮助,我可以在我的课程后面编写一些示例代码。希望能帮助到你!

+0

是的,这是一个了不起的想法!真的很容易实现,谢谢! – 2013-04-24 12:40:36

1

您的滑块连接到valueChanged:行动。你应该实现它像这样:

- (void)mySliderValueChanged:(UISlider *)slider 
{ 
    CGFloat myMinValue = 50.0f; // should be a global variable 

    if(slider.value < myMinValue) 
    { 
    slider.value = myMinValue; 
    } 
}