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

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

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

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

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

【问题讨论】:

    标签: ios objective-c xcode cocoa-touch uislider


    【解决方案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;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多