我试图在UISlider达到给定的进度时运行performSegue:,所以我希望它只执行一次。是否可以立即禁用滑动交互?
我已经尝试过使用resignFirstResponder,将enabled和userInteractionEnabled设置为false,再设置回true,然后遍历关联的手势识别器,禁用并再次启用它们。这些替代方案都没有产生预期的效果。
我希望该控件在将来的事件中保持活动状态,但停止当前事件的交互。禁用用户交互并禁用它并不能解决我的问题。
发布于 2016-07-19 03:19:32
使用布尔实例变量triggered。在响应ValueChanged事件时检查它是否是真的,如果是,就退出。否则,将该变量设置为true,然后执行分段。在TouchCancel事件中将该变量重新设置为false。
发布于 2017-08-05 00:00:04
由于UISlider继承自UIControl,因此将控件的布尔值设置为YES或NO -将切换其启用状态。如果禁用,滑块将看起来不透明。此外,由于UIControl继承自UIView,因此设置布尔值userInteractionEnabled -将切换是否忽略用户事件。如果禁用,滑块将看起来正常,但不会移动等。
但是-如果你已经开始使用滑块,并且它的使用选择了一个方法,并且在该方法中使用了.enabled或.userInteractionEnabled,那么它将继续激发,直到你松开,即重复调用该方法。一旦你放手,你的控制设置就会起作用。为了避免多次执行被调用的方法,您可以在该方法的开始处查询标志的状态,如果设置为yes,则从该方法返回。在查询之后,立即将Bool标志设置为yes,当然-在代码中有意义的地方(当方法达到其目的时)再次将标志设置为no (或者可能已经将continuous属性设置为NO会有所帮助):
-(void)methodSelectedBySlider
{
if (_inSelectedMethodFlag==YES) {
return;
}
_inSelectedMethodFlag = YES;https://stackoverflow.com/questions/38444184
复制相似问题