单击表格行时更改 UISlider 控制器

Posted

技术标签:

【中文标题】单击表格行时更改 UISlider 控制器【英文标题】:Change UISlider controller when Table row clicked 【发布时间】:2017-12-28 01:56:01 【问题描述】:

我想创建一个 UISlider,当用户选择 tableview 行时。它更新最小值和最大值,将滑块移动到由变量设置的值。

滑块与 tableview 位于不同的 Viewcontroller 中。我使用结构将值传递给滑块(发布在下面)。此时,当我在视图控制器 viewDidLoad 中设置结构值时,我可以让滑块工作。 But I am not able to change the UIslider when a tableview row is selected. I think the problem is that the view with the UIslider is not refreshing when the row is selected. Tableview 使用容器视图嵌入到带有滑块的视图中。

     struct GlobalSliderValues 

        static var minimumValue = Int()
        static var maximumValue = Int()
        static var lowerValue = Int()
        static var UpperValue = Int()
        static var locationValue = Int()
        static var sliderValue = Int()
        static var setValue = Int()
    

// Slider ViewController 

override func viewDidLoad() 
    super.viewDidLoad()

    sliderOutlet.minimumValue = Float(GlobalSliderValues.minimumValue)
    sliderOutlet.maximumValue = Float(GlobalSliderValues.maximumValue)
    sliderOutlet.isContinuous = true
    sliderOutlet.tintColor = UIColor.green
    sliderOutlet.value = Float(GlobalSliderValues.sliderValue)




// Method attempting to change Slider

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    switch indexPath.row 
    case 3:
        GlobalSliderValues.minimumValue = 100
        GlobalSliderValues.maximumValue = 10000000
        GlobalSliderValues.sliderValue = 100000000

    default:
        break
    

【问题讨论】:

【参考方案1】:

尝试重构滑块分配并添加NotificationCenter 以便能够从任何地方刷新滑块,这样做:

override func viewDidLoad() 
  super.viewDidLoad()

  sliderOutlet.isContinuous = true
  sliderOutlet.tintColor = UIColor.green
  self.refreshSlider()


@objc func refreshSlider() 
  sliderOutlet.minimumValue = Float(GlobalSliderValues.minimumValue)
  sliderOutlet.maximumValue = Float(GlobalSliderValues.maximumValue)
  sliderOutlet.value = Float(GlobalSliderValues.sliderValue)


override func viewDidAppear(_ animated: Bool) 
  super.viewDidAppear(animated)
  NotificationCenter.default.addObserver(self, selector: #selector(self.refreshSlider), name: Notification.Name("refreshSlider"), object: nil)


override func viewDidDisappear(_ animated: Bool) 
  super.viewDidDisappear(animated)
  NotificationCenter.default.removeObserver(self, name: Notification.Name("refreshSlider"), object: nil)

最后在您的didSelectRowAt 中,您将拥有:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
  switch indexPath.row 
  case 3:
    GlobalSliderValues.minimumValue = 100
    GlobalSliderValues.maximumValue = 10000000
    GlobalSliderValues.sliderValue = 100000000
    NotificationCenter.default.post(name:Notification.Name("refreshSlider"), object: nil)
  break:
  default:
    break
  

【讨论】:

感谢您的帖子。我不确定将 refreshSlider() 函数放在哪里。滑块和 tableView 没有连接到同一个 viewController。我使用滑块将功能添加到视图控制器,没有错误。但我无法调用“didSelectRowAt”,因为它位于不同的 viewController 中。 tableView 嵌入在滑块视图控制器上的容器中。

以上是关于单击表格行时更改 UISlider 控制器的主要内容,如果未能解决你的问题,请参考以下文章

带有 UISlider 的 VC 更改 VC2 上的文本字段

表格视图单元格按钮,单击后更改按钮图像

弹出框控件在选择不同的表视图行时更改其位置

搜索控制器活动时选择表格行时应用程序崩溃

目标 C - 如何使用按钮单击操作更改 UIslider 值

单击表格视图行时出现异常