暂时禁用UISlider交互

时间:2016-07-18 19:04:09

标签: ios cocoa-touch uikit uislider

performSegue:达到给定进度时,我正在尝试运行UISlider,所以我希望它只执行一次。是否可以立即禁用滑动交互?

我已尝试使用resignFirstResponder,将enableduserInteractionEnabled设置为false并返回true,并通过关联的手势识别器进行迭代禁用并再次启用它们。这些替代品都没有产生预期的效果。

我希望控件在未来事件中保持活动状态,但要停止当前事件的交互。禁用用户交互并将其置于禁用状态并不能解决我的问题。

2 个答案:

答案 0 :(得分:0)

使用布尔实例变量triggered。当你回复ValueChanged事件时检查是否属实,如果是,则进行纾困。否则将变量设置为true并执行segue。在TouchCancel事件上将变量设置为false。

答案 1 :(得分:0)

当UISlider继承自UIControl时,将控件的布尔值设置为YES或NO - 将切换其启用状态。如果禁用,滑块将看起来不透明。 此外,当UIControl继承自UIView时,设置userInteractionEnabled的布尔值 - 将切换是否忽略用户事件。如果禁用,滑块将看起来正常,但不会移动等。

但是 - 如果你已经开始使用滑块并且它的使用选择了一种方法,并且在该方法中你使用.enabled或.userInteractionEnabled,那么它会一直触发直到你松开,即重复调用该方法。一旦松开,您的控制设置将起作用。 为了避免多次执行被调用的方法,您可以在该方法的开头查询标志的状态,如果设置为yes,则返回该方法。在查询之后,立即将Bool标志设置为yes,当然 - 在代码中某处有意义(当方法达到其目的时)将标志设置为no(或者可以将连续属性设置为NO已经有帮助) :

    -(void)methodSelectedBySlider
    {
    if (_inSelectedMethodFlag==YES) {
       return;
    }

   _inSelectedMethodFlag = YES;