我有一个UITableView,其原型cells
包含一个滑块和旁边的textfield
。随着滑块的值发生变化,textview
内的值也会发生变化。它工作正常,除了表的大小增加时,向下滚动时生成的新cell
已经显示第一个单元格的值。我确实认识到这与dequeueReusableCellWithIdentifier
函数有关,因为cells
被重用。怎么能绕过这个呢?
这是代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("infoCell") as! InfoCell
cell.dressLabel.text = inputArrayFortableView[indexPath.row]
cell.uiSlider.maximumValue = 100
cell.uiSlider.minimumValue = 0
cell.uiSlider.continuous = true
cell.uiSlider.addTarget(cell, action: #selector(cell.uiSliderSetValue), forControlEvents: .ValueChanged)
if(cell.DressTextField.text != "")
{
cell.uiSlider.setValue(Float(cell.DressTextField.text!)!, animated: true)
}
print("outside uisliderSetvalue")
cell.uiSlider.tag = indexPath.row
print(cell.uiSlider.tag)
return cell
}
我附上截图。请记住,当我向下滚动时,新单元格与第一个单元格具有相同的值,生成的第二个单元格具有与第二个单元格相同的值,依此类推。
答案 0 :(得分:0)
由于单元格被重用,滑块将保留上一次使用单元格时的值。确保始终初始化cellForRowAtIndexPath
中的滑块:
if cell.DressTextField.text != ""
{
cell.uiSlider.setValue(Float(cell.DressTextField.text!)!, animated: true)
} else {
cell.uiSlider.setValue(0, animated: false)
}
答案 1 :(得分:0)
更改值时,您必须将滑块的值存储到inputArrayFortableView
。每次func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
调用时都必须重新加载此值,因为表格单元格是重用的,它会存储旧值。