我用一些包含UISlider的单元格做了一个UITableView。每个UISlider都有一个唯一的标签--它所代表的值的编号。
如果将它们的"isContinuous"值设定为true,则第一个滑块和最后一个滑块会相互影响-拖动其中一个滑块会对另一个滑块的值进行相同的更改。
以下是这些细胞的制作过程:
class CellWithSliderValues: UITableViewCell{
@IBOutlet var slider: UISlider! = {
let ctrl = UISlider()
ctrl.backgroundColor = Constants.SETTINGS_CELL_COLOR
return ctrl
}()
// some labels
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// layout
}
override func prepareForReuse() {
super.prepareForReuse()
slider.tag = -10
minLabel.text = nil
maxLabel.text = nil
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
internal func makeSignalLevelCell(\*some args*\) -> UITableViewCell{
let tag: Int
let currValue: Float
let minValue, maxValue: Float
switch(kind){
\\ set all the values above
}
if (numInSection == 0){
// other cells
} else{
let cell = mainScreen.table.dequeueReusableCell(withIdentifier: "CellWithSliderValues") as! CellWithSliderValues
cell.slider.maximumValue = maxValue
cell.slider.minimumValue = minValue
cell.slider.value = currValue
cell.minLabel.text = Int(minValue).description
cell.maxLabel.text = Int(maxValue).description
cell.slider.tag = tag
cell.slider.addTarget(self, action: #selector(sliderChange), for: .valueChanged)
return cell
}
@objc func sliderChange(sender: UISlider){
guard let valueToAdjustNumber = HeatmapSettings.RangedValueOption(rawValue: sender.tag) else {print("Non-understood slider"); return}
print (valueToAdjustNumber)
let newValueGiven = sender.value
switch(valueToAdjustNumber){
\\check for validity and save changes to a different variable
}
sender.resignFirstResponder()
mainScreen.table.reloadData() // beacuse we need to refresh the number in text box
}
表中的第一个滑块和最后一个滑块相互影响-当一个滑块的值被调整时,另一个滑块的值也会改变。
print (valueToAdjustNumber)
行上方-看起来valueToAdjustNumber在预期的滑块值和受毛刺影响的值之间交替。
这不是单元格重用的问题-我试过genereting新单元格而不是重用,也试过重用单元格但重新创建滑块,都无济于事。
当滑块的. isContinuous设置为false时,问题消失。
1条答案
按热度按时间sd2nnvve1#
一次仅重新加载一个部分后,漏洞消失。
被制成