当performSegue:
达到给定进度时,我正在尝试运行UISlider
,所以我希望它只执行一次。是否可以立即禁用滑动交互?
我已尝试使用resignFirstResponder
,将enabled
和userInteractionEnabled
设置为false
并返回true
,并通过关联的手势识别器进行迭代禁用并再次启用它们。这些替代品都没有产生预期的效果。
我希望控件在未来事件中保持活动状态,但要停止当前事件的交互。禁用用户交互并将其置于禁用状态并不能解决我的问题。
答案 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;