在 Xcode 上创建副本 outlets/actions

Creating duplicate outlets/actions on Xcode

目前我的 viewcontroller.swift 上有三个单独的滑块,我希望它们都执行相同的功能,即将滑块值四舍五入到最近的位置。我已经完成了第一个,因此:

@IBAction func changePos(_ sender: UISlider) {
    slider.value = roundf(slider.value)
}

我已经尝试了很多不同的方法来通过 slider2, changePos2, etc 将相同的功能添加到不同的 UISliders,但是我的应用要么崩溃要么不执行该功能。

如何让不同的 UISlider 在同一个 viewcontroller 中执行相同的功能?

执行此操作的好方法是使用如下所示的 IBOutletCollections。

@IBOutlet var sliders: [UISlider]!

然后使用下面漂亮的 swift 语法:

sliders.forEach { (slider) in
            slider.addTarget(self, action: #selector(sliderValueDidChange(sender:)), for: .valueChanged)
        }

这样您就可以为每个滑块调用相同的选择器。

您可以将所有 3 个滑块连接到同一个 @IBAction。只需在实现中使用 sender 参数而不是 slider 输出。

@IBAction func changePos(_ sender: UISlider) {
    sender.value = sender.value.rounded()
}