【问题标题】:iOS: Swift: UISlider editingDidEnd not being callediOS:Swift:未调用 UISlider editingDidEnd
【发布时间】:2018-01-09 19:26:12
【问题描述】:

我已经设置了一个编辑函数,并以滑块结尾,但它看起来不像被调用。我在其中添加了一个打印语句和一个断点。当我的用户放开滑块时,是否需要执行其他操作才能触发功能?

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

【问题讨论】:

  • 显示IBAction的代码

标签: ios swift uislider


【解决方案1】:

使用“值已更改”事件。如果您只想更新最终值,请更改 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 实现一个事件。

或者在代码中:

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.")
}

【讨论】:

  • 我需要它是连续的,因为我用它来控制一个附件,我想在用户放开组件时将它重置到滑块的中间。
  • 然后继续为“Touch Up Inside”事件创建一个 IBAction。每次用户释放滑块时它都会运行。
  • @cweber105 谢谢,我建议您在答案中添加“内部修饰”评论 - 这非常有用:)
【解决方案2】:

我认为您要做的是在值更改时收到通知。然后你必须将事件设置为“Value Changed”而不是“Editing Did End”。

【讨论】:

  • 不,我想知道用户何时松开滑块,以便将其重置到中间。
  • 我不知道你是什么意思用户放开滑块你的意思是当用户释放滑块后过了一点时间???
  • 我认为你必须使用计时器来做到这一点。
【解决方案3】:

如果您将 Touch Up Inside 和 Touch Up Outside 都设置为指向您的 @IBAction,那么您可以在用户完成滑动并保持滑块连续时触发该函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多