2017-10-08 35 views
0

我目前在viewcontroller.swift上有三个单独的滑块,我希望它们都执行相同的功能,即将滑块值四舍五入到最近的位置。我已经完成了第一个,因为这样的:在Xcode上创建重复的出口/动作

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

我以slider2, changePos2, etc尝试了许多不同的方式同样的功能添加到不同的UISliders,但我的应用程序要么崩溃或不执行的功能。

如何使单独的UISliders在相同的viewcontroller中执行相同的功能?

+1

什么是崩溃说? – Tushar

+2

将'func'改为使用'sender'而不是'slider',然后将所有滑块连接到这个'@ IBAction'。 '@IBAction func changePos(_ sender:UISlider)sender.value = roundf(sender.value)}' – vacawama

+0

好吧,我只是将所有滑块变量设置为'sender'并且一切正常。那么对于我的另外两个,我不必制作新的IBOutlet或IBAction?我可以简单地在现有的IBAction中添加一个新的功能? – jacobbullon

回答

1

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

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

这样做的好方法是使用如下的IBOutletCollections。

@IBOutlet var sliders: [UISlider]! 

,然后用下面漂亮的迅速语法:

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

这样,您将有相同的选择被调用每一个滑块。