【问题标题】:How to programmatically call UISlider's .valueChanged event如何以编程方式调用 UISlider 的 .valueChanged 事件
【发布时间】:2021-01-14 01:02:51
【问题描述】:

当我物理触摸并拖动滑块时,它的 .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
}

【问题讨论】:

    标签: ios swift uislider


    【解决方案1】:

    只需致电您的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)
    }
    

    【讨论】:

    • 啊,sendActions(for:),我忘了。我总是将它用于按钮,但我从未将它用于其他任何东西。好主意!谢谢???。
    猜你喜欢
    • 2010-10-04
    • 2012-11-25
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多