iOS: Swift:UISlider的editingDidEnd方法未被调用

3

我已经设置了一个用于滑块编辑结束的函数,但似乎它没有被调用。我在其中添加了一个打印语句和断点。当用户释放滑块时触发函数还需要做些什么吗?

输入图像描述

    @IBAction func sliderEditingDidEnd(sender: UISlider) {
    print("did end");
}

展示IBAction的代码 - Woodstock
3个回答

5
使用事件“值已更改”。如果您只希望获得最终值的更新,请更改UISlider.continuous。
var slider = UISlider()
slider.continuous = false
//add slider to view

@IBAction func valueChanged(sender: UISlider) {
    println("Value changed.")
}
//prints "Value changed." once upon releasing slider.

如果需要滑块连续滑动,可以实现UIControlEvent.TouchUpInside事件。
要么在storyboard中实现:Either in storyboard: 要么在代码中实现:
override func viewDidLoad() {
    super.viewDidLoad()
    
    mySlider.addTarget(self, action: "userReleasedSlider:", forControlEvents: UIControlEvents.TouchUpInside)

    
    // Do any additional setup after loading the view, typically from a nib.
}

func userReleasedSlider(slider: UISlider) {
    print("User released slider.")
}

我需要它是连续的,因为我正在使用它来控制一个附件,并且当用户释放组件时,我想将其重置为滑块的中间位置。 - Paul Ruiz
2
然后继续创建一个IBAction来处理“Touch Up Inside”事件。每次用户释放滑块时都会运行它。 - cweber105
@cweber105 谢谢,我能否建议您将“touch up inside”注释添加到答案中 - 这非常有用 :) - Kepedizer

0

我认为您想做的是在值改变时得到通知。那么,您必须将事件设置为“值已更改”,而不是“编辑已结束”。


不,我想知道用户何时松开滑块,以便我可以将其重置为中间位置。 - Paul Ruiz
我不知道你的意思,用户放开滑块是指在用户释放滑块后过了一小段时间吗? - Jason Nam
我认为你需要使用计时器来完成这个任务。 - Jason Nam

0
如果你将“Touch Up Inside”和“Touch Up Outside”都指向你的@IBAction,那么当用户完成滑动并保持滑块连续时,你就可以触发该函数。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接