ios 不同UITableViewCell内的UISslider在连续时相互影响

jmo0nnb3  于 2023-02-10  发布在  iOS
关注(0)|答案(1)|浏览(131)

我用一些包含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时,问题消失。

sd2nnvve

sd2nnvve1#

一次仅重新加载一个部分后,漏洞消失。

mainScreen.table.reloadData()

被制成

mainScreen.table.reloadSections([sectionNumberToReload(value: valueToAdjustNumber)], with: .none)

相关问题