2017-06-21 34 views
0

我有一个带有标签的滑块视图。我需要在滑块移动时更新标签值。滑块正在工作,我能够获得日志中的滑块值。但标签值只是在重新加载表视图或相应的单元格后才更新。这是造成闪烁的影响。在swift中更新标签中的滑块值

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
{ 
    rangeSlider.backgroundColor = UIColor.clear 
    cell.addSubview(rangeSlider) 
    rangeSlider.tag = indexPath.row 
    rangeSlider.addTarget(self, action: #selector(PresentedViewController.rangeSliderValueChanged), for: .valueChanged) 
    NotificationCenter.default.addObserver(self, selector: #selector(showSliderValue), name: NSNotification.Name(rawValue: "slidervalue"), object: nil) 

    { 
     cell.currentMaximumValue.text = self.upperSliderText 
     cell.currentMinimumValue.text = self.LowerSliderText 
    } 
    else{ 
     let b:String = String(format:"%f", appDelegate.priceslidermaximumValue) 
     let c:String = String(format:"%f", appDelegate.pricesliderminimumValue) 
     cell.currentMaximumValue.text = b 
     cell.currentMinimumValue.text = c 
    } 

    return cell 
} 
+1

你在tableViewCell中有滑块吗? –

+0

是在一个表格视图单元格 – Shpuj

+0

显示'cellForRowAt'的代码,这将告诉我们如何填充tableView中的数据 –

回答

0

感谢您的回复。 要解决重新加载单元格时出现的闪烁效应,请使用以下行。

tableView.reloadSections(IndexSet(integer: indexPath.section), 
         with: UITableViewRowAnimation.fade) 

它为我工作。

0

在代码中需要更改几件事情。

首先,在您的cellForRowAt方法中,如果您得到的细胞对象为dequeueReusableCell,则在执行addSubview操作时需要小心。所以你的单元格对象只是一个可重用的单元格,它可能已经有一个滑块。如果您在添加子视图之前没有清除所有视图,上下滚动一段时间后,您的单元格将充满滑块并可能崩溃。我建议你在故事板的自定义表格视图单元格中添加此滑块。其次,请勿使用NotificationCenter.default.addObserver。由于cellForRow被调用以准备显示的每个单元,因此您要多次添加观察器。

因此,这里的答案

制造阵列来存储您的滑块值为每个细胞

var sliderValues = [10, 20, 30, 40] 

在你cellForRow,只需添加听者喜欢

cell.textField.text = sliderValues[indexPath.row] 
cell.slider.tag = indexPath.row // Use tag to see which cell your slider is located 
cell.slider.addTarget(self, action: #selector(sliderValueChanged), for: UIControlEvents.valueChanged) 

然后在您的功能中与听众合作

func sliderValueChanged(sender: UISlider){ 
    sliderValues[sender.tag] = sender.value 
    self.tableView.reloadData() 
}