限制滑动 UISlider 超过某个点

Posted

技术标签:

【中文标题】限制滑动 UISlider 超过某个点【英文标题】:Limit sliding UISlider past certain point 【发布时间】:2013-04-24 12:32:54 【问题描述】:

让我们假设有一个UISlider,我为其设置了一个特定的值。然后,滑块手柄按预期移动到该值。

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

例如,我有一个UISlider,其最小值为 0,最大值为 100,我将其值设置为 50。我不希望用户滑动“左”于 50,但在“对”我想让用户来回滑动手柄。

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

【问题讨论】:

【参考方案1】:

您应该首先确保更新事件是连续发送的:

mySlider.continuous = YES;

您也可以在故事板/笔尖中执行此操作(正如 @fDmitry 所提到的,这是 IB 中的默认状态)。

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

-(IBAction)sliderValueChanged:(id)sender;

这样实现:

- (IBAction)sliderValueChanged:(id)sender 

    float maxValue = 50.0f;

    if ([(UISlider*)sender value] > maxValue) 
        [(UISlider*)sender setValue:maxValue];
    

【讨论】:

是我弄错了,还是 IB 的 UISliders 默认是连续的? 他们是。我添加它以防万一。也许他在寻找解决方案时试图到处点击,却不小心禁用了它:p【参考方案2】:

其实这个很简单:)

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

如果您需要任何进一步的帮助,我可以在课后编写一些示例代码。希望对您有所帮助!

【讨论】:

是的,这是一个很棒的主意!而且真的很容易实现,谢谢!【参考方案3】:

将您的滑块连接到valueChanged: 操作。你应该像这样实现它:

- (void)mySliderValueChanged:(UISlider *)slider

  CGFloat myMinValue = 50.0f; // should be a global variable

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

【讨论】:

以上是关于限制滑动 UISlider 超过某个点的主要内容,如果未能解决你的问题,请参考以下文章

UISlider 具有不均匀的步骤。

UITableView 中的 UISlider 没有响应滑动手势

IOS开发-UI学习-UISlider(滑动条)的使用

自动滚动 UISlider

防止 UIPageViewController 的滑动影响 UISlider

以编程方式滑动 UISlider