如何在单个@IBAction 中获取多个 UISlider 的值?

Posted

技术标签:

【中文标题】如何在单个@IBAction 中获取多个 UISlider 的值?【英文标题】:How to get value of multiple UISlider in a single @IBAction? 【发布时间】:2021-03-29 14:37:02 【问题描述】:

我有 5 个滑块引用相同的 @IBAction func sliderDidSlide()。每个 UISlider 都有一个标签 0...4。如何获得每个滑块的值?我想使用 sender.tag 来获取哪个滑块,然后使用 .value 来获取它的值。我已经尝试过 sender.tag.value,但这不起作用。

以下是我想要做的,但它不起作用。我试过搜索,但找不到解决方案。我知道我可以有多个@IBAction,但如果可能的话,我想保存代码并使用标签将它们全部放在同一个@IBAction 中。任何帮助将不胜感激。谢谢。

@IBAction func sliderDidSlide(_ sender: UISlider) 
    
    let maxPrice = 10000

    switch sender.tag 
    case 0:
        let price = maxPrice * sender.tag.value // this doesn't work
        label1.text = "\(price)"
    case 1:
        // same idea as case 0
    case 2:
        <#code#>
    case 3:
        <#code#>
    case 4:
        <#code#>
    default:
        break
    

【问题讨论】:

你不应该使用sender.value吗? @Andrew 是对的。应该是let price = maxPrice * sender.value @Andrew 通常我会使用 sender.value 如果有一个 UISlider 附加到 IBAction。但是我有多个滑块引用同一个 IBAction,所以我需要一种方法来知道哪个滑块的值正在改变。这就是我使用 sender.tag 的原因。我试过了: let price = Int(Float(maxPrice) * sender.value) 但这也行不通。 @aheze 如果只有 1 个 UISlider 连接到 IBAction,我通常会使用 sender.value。但是,我在同一个 IBAction 中有 5 个滑块,这就是为什么我需要使用标签来知道哪些滑块值正在发生变化。 谢谢大家的帮助 【参考方案1】:

sliderDidSlide 将在其中一个滑块的值发生变化时被调用。在每个调用中,对应的UISlider 将被传递到sender 参数标签中。

您已经通过switch sender.tag 区分滑块。 sender.tag.value 没有意义,也不会编译,因为tag 没有名为value 的属性。

切换标签后,可以直接访问sender.value

let price = maxPrice * sender.value /// directly access value

switch sender.tag 
case 0:
    label1.text = "\(price)"
case 1:
    label2.text = "\(price)
case 2:
    label3.text = "\(price)
case 3:
    label4.text = "\(price)
case 4:
    label5.text = "\(price)
default:
    break

【讨论】:

这正是我会做的 谢谢大家的帮助 这是解决问题的好方法,但我不喜欢标签。它们很脆弱。如果您稍后对滑块重新排序、添加更多、删除一些或添加其他使用相同标签编号的视图,您的代码可能会中断(在这种情况下,您是从发件人那里获取标签,所以您应该没有问题重复的标签号。viewWithTag(_:) 甚至更加脆弱。) 我建议不要使用标签,而是将滑块放入数组中,然后在数组中查找位置以找出正确的索引。

以上是关于如何在单个@IBAction 中获取多个 UISlider 的值?的主要内容,如果未能解决你的问题,请参考以下文章

在单个按钮单击中隐藏多个 UIButton

如何使用单个故事板uiviewcontroller为多个子类

如何在javascript中从多个数组中获取单个数组[重复]

如何使用单个查询获取存储在不同变量中的多个表行的计数?

如何从多个可选选项中获取单个值?

如何在单个 API 调用中获取单个 VM 的多个 VM 指标(百分比 CPU、磁盘读取操作/秒、内存等 .. 平台指标)详细信息