单击 Table 行时更改 UISlider 控制器
Change UISlider controller when Table row clicked
我想创建一个 UISlider,当用户选择一个表视图行时。它更新最小值和最大值,将滑块移动到变量设置的值。
滑块与 tableview 不同 Viewcontroller。我正在使用结构(在下面发布)将值传递给滑块。此时,当我在视图控制器 viewDidLoad 中设置结构值时,我可以让滑块工作。 But I am not able to change the UIslider when a tableview row is selected.我认为问题在于,选择行时,使用Uislider的视图并没有令人耳目一新。 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
}
}
尝试重构滑块分配并添加 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
}
}
我想创建一个 UISlider,当用户选择一个表视图行时。它更新最小值和最大值,将滑块移动到变量设置的值。
滑块与 tableview 不同 Viewcontroller。我正在使用结构(在下面发布)将值传递给滑块。此时,当我在视图控制器 viewDidLoad 中设置结构值时,我可以让滑块工作。 But I am not able to change the UIslider when a tableview row is selected.我认为问题在于,选择行时,使用Uislider的视图并没有令人耳目一新。 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
}
}
尝试重构滑块分配并添加 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
}
}