【问题标题】:Cancel auto triggering value changed event for UISwitch取消 UISwitch 的自动触发值更改事件
【发布时间】:2015-08-18 09:40:06
【问题描述】:

是否可以取消 UISwitch 的自动触发值更改事件? 我对 UISwitch 内部事件进行了修饰,我想先做后台工作,然后当工作完成时,我手动打开开关,而不是在触摸后立即打开,即使后台工作还没有完成。

【问题讨论】:

  • 我认为用户会对这个 UI 感到困惑。如果用户在滑动时看到开关没有变化,他们会认为有问题。如果您想要这种行为,您可能应该设计一个看起来不像 Apple 的 UISwitch 的控件。
  • 我旁边有一个指示后台工作的指示器
  • 您应该禁用它,直到您的后台作业完成。这将向您的用户显示该开关当前不可用。指示器会提示用户,工作正在进行中,开关很快就会可用。
  • 这其实是个好主意

标签: ios swift xamarin uikit uiswitch


【解决方案1】:

您不能为.ValueChanged 事件添加目标操作。只需在后台任务完成处理程序中进行切换即可。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
    println("This is run on the background queue")
    dispatch_async(dispatch_get_main_queue(), {
        aSwitch.value = true
    })
})

编辑:

对不起,我刚刚明白你的问题。你的意思是当用户按下开关时,它的值不应该首先改变,对吧?

答案:

您可以为开关设置userInteractionEnabled = false,然后使用tapGestureRecognizer 在其顶部添加一个UIView(不是女巫的子视图)。然后在点击时处理背景事件,并打开/关闭开关。

【讨论】:

  • 如何不添加 valuechanged 事件?是否在事件内部自动触发 valuechanged 事件?
【解决方案2】:

您可以关闭“继续”功能,因此您只会在内部修饰后收到 Value Changed 事件。这就是你要找的吗?

【讨论】:

  • 所以这种方式只改变值而不改变UI?
  • 请参阅文档中的 continous 属性:“包含一个布尔值,指示滑块值的变化是否会生成连续更新事件。”这就是您在内部修饰时描述的行为。您也可以禁用它,这将更改滑块的样式,以显示它当前已禁用。禁用滑块而不向用户显示它不是一个好主意。用户可能会感到困惑并认为您的应用没有响应。
  • OP 使用的是 UISwitch,而不是滑块。
  • 哦,对不起,没关系。你真的不应该在没有向用户提示的情况下禁用开关。无论如何,您可以在后台作业完成时检查滑块的值。
猜你喜欢
  • 2015-10-13
  • 1970-01-01
  • 2019-04-23
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多