微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式调用 UISlider 的 .valueChanged 事件

如何解决如何以编程方式调用 UISlider 的 .valueChanged 事件

当我实际触摸并拖动滑块时,它的 .valueChanged 事件工作正常:

slider.addTarget(self,action: #selector(sliderValueChanged(sender:)),for: .valueChanged

@objc func sliderValueChanged(sender: UiSlider) {
    print(sender.value)
}

我有一个可以移动的视图,就像地图上的汽车一样。当汽车水平移动时,返回一个值,该值使滑块物理移动,这也能正常工作。但是因为我没有实际拖动滑块,所以它的 .valueChanged 不会被调用

如何在不触摸滑块时以编程方式调用事件?

func carTraveled(distance: Double) {

    slider.value = Float(distance) // slider does move but event is never called
}

解决方法

只需调用您的 action 选择器:

func carTraveled(distance: Double) {

    slider.value = Float(distance)
    sliderValueChanged(sender: slider)
}

或者,如果滑块有很多目标-动作对,或者您当时不知道 action 选择器方法,您可以执行 sendActions(for:)

func carTraveled(distance: Double) {

    slider.value = Float(distance)
    slider.sendActions(for: .valueChanged)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。