首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >暂时禁用UISlider交互

暂时禁用UISlider交互
EN

Stack Overflow用户
提问于 2016-07-19 03:04:09
回答 2查看 649关注 0票数 0

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

我已经尝试过使用resignFirstResponder,将enableduserInteractionEnabled设置为false,再设置回true,然后遍历关联的手势识别器,禁用并再次启用它们。这些替代方案都没有产生预期的效果。

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

EN

回答 2

Stack Overflow用户

发布于 2016-07-19 03:19:32

使用布尔实例变量triggered。在响应ValueChanged事件时检查它是否是真的,如果是,就退出。否则,将该变量设置为true,然后执行分段。在TouchCancel事件中将该变量重新设置为false。

票数 0
EN

Stack Overflow用户

发布于 2017-08-05 00:00:04

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

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

代码语言:javascript
复制
    -(void)methodSelectedBySlider
    {
    if (_inSelectedMethodFlag==YES) {
       return;
    }

   _inSelectedMethodFlag = YES;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38444184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档