2017-12-28 2 views
1

사용자가 테이블 뷰 행을 선택할 때 UISlider를 만들고 싶습니다. 최소값을 업데이트합니다. & 최대 값은 변수에 설정된 값으로 슬라이더를 이동합니다.테이블 행을 클릭 할 때 UISlider 컨트롤러 변경

슬라이더가 다른 ViewController 및 tableview에 있습니다. struct (아래 게시 됨)를 사용하여 슬라이더에 값을 전달하고 있습니다. 이 시점에서 뷰 컨트롤러 viewDidLoad에서 구조체 값을 설정할 때 슬라이더가 작동하도록 할 수 있습니다. 하지만 tableview 행을 선택하면 UIslider를 변경할 수 없습니다. 문제는 행이 선택 될 때 UIslider가있는 뷰가 새로 고쳐지지 않는다는 것입니다. Tableview는 컨테이너 뷰를 사용하여 슬라이더가있는 뷰에 포함됩니다. 또한 NotificationCenter를 추가 슬라이더 할당을 리팩토링하는

 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 
    } 
} 

답변

0

시도는 그렇게 어디서나 슬라이더를 새로 고침 할 수 있어야합니다 : 내부

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 
    } 
} 
+0

게시물을 가져 주셔서 감사합니다. 어디 refreshSlider() 함수를 넣을 지 모르겠습니다. 슬라이더와 tableView는 동일한 viewController에 연결되어 있지 않습니다. 슬라이더가있는 뷰 컨트롤러에 함수를 추가했는데 에러는 발생하지 않았습니다. 하지만 다른 viewController에있는 것처럼 "didSelectRowAt"를 호출 할 수 없습니다. tableView는 슬라이더 뷰 컨트롤러의 컨테이너에 포함됩니다. –

+0

@ k.thomas 이해, 내 편집 확인 –

관련 문제