暂时禁用 UISlider 交互
Posted
技术标签:
【中文标题】暂时禁用 UISlider 交互【英文标题】:Disable UISlider interaction temporarily 【发布时间】:2016-07-18 19:04:08 【问题描述】:当UISlider
达到给定进度时,我正在尝试运行performSegue:
,所以我希望它只执行一次。是否可以立即禁用滑动交互?
我已经尝试过使用resignFirstResponder
,将enabled
和userInteractionEnabled
设置为false
并返回true
,并遍历相关的手势识别器来禁用和启用它们。这些替代方案都没有产生预期的效果。
我希望控件对未来的事件保持活动状态,但要停止当前事件的交互。禁用用户交互并禁用它并不能解决我的问题。
【问题讨论】:
【参考方案1】:使用布尔实例变量triggered
。当您响应 ValueChanged
事件时检查它是否正确,如果是,请退出。否则将变量设置为 true 并执行你的 segue。在 TouchCancel
事件上将变量设置回 false。
【讨论】:
交互并没有停止,用户仍然可以滑动滑块【参考方案2】:由于 UISlider 从 UIControl 继承,将控件的布尔值设置为 YES 或 NO - 将切换其启用状态。如果禁用,滑块将看起来不透明。 同样作为 UIControl 从 UIView 继承,设置 userInteractionEnabled 的布尔值 - 将切换是否忽略用户事件。如果禁用,滑块将看起来正常但不会移动等。
但是 - 如果您已经开始使用滑块并且它的使用选择了一个方法,并且在该方法中您使用了 .enabled 或 .userInteractionEnabled,那么它会持续触发直到您松开,即重复调用该方法。一旦你放手,你的控制设置就会起作用。 为避免多次执行被调用的方法,您可以在该方法的开头查询标志的状态,如果设置为是,则从该方法返回。查询后立即将 Bool 标志设置为 yes,当然 - 在代码中有意义的地方(当方法已达到其目的时)再次将标志设置为 no(或者可能将连续属性设置为 NO 已经有帮助) :
-(void)methodSelectedBySlider
if (_inSelectedMethodFlag==YES)
return;
_inSelectedMethodFlag = YES;
【讨论】:
以上是关于暂时禁用 UISlider 交互的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 中的 UISlider 没有响应滑动手势
启用用户交互的 FadeIn 和 FadeOut UISlider