作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 xib 文件中用 UIButton
创建了一个单元格。该按钮是一个 checkmarkbutton
所以当我点击它时它会显示一个复选标记。当我在单元格中启用一个按钮并添加一些新单元格时,带有启用复选标记按钮的单元格从 tableview 的 View 中消失时,会自动出现一个带有已启用按钮的新单元格。我怎样才能阻止它?
var sliderValues = [String]()
@IBAction func addNewCell(_ sender: Any) {
sliderValues.insert("\(Int(waterAmountSlider.value)) L", at: 0)
tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: UITableView.RowAnimation.automatic)
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 65.0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sliderValues.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "xibcell", for: indexPath) as! TableViewCell
cell.cellWaterAmountLabel.text = sliderValues[indexPath.row]
// cell.cellLabel.textColor = UIColor.lightGray
cell.backgroundColor = UIColor.groupTableViewBackground
cell.selectionStyle = .none
return cell
}
xib 单元格代码
class TableViewCell: UITableViewCell {
@IBOutlet weak var cellButton: UIButton!
@IBOutlet weak var cellWaterAmountLabel: UILabel!
@IBAction func cellButtonPressed(_ sender: Any) {
cellButton.setImage(UIImage(named: "enabledCheckbox"), for: UIControl.State.normal)
}
}
最佳答案
它正在重复使用您已经创建的单元格。为避免此行为,您必须在更新按钮的单元格时捕获并更新状态。
这可能是一个可能的解决方案:
var sliderValues = [(String, Bool)]()
@IBAction func addNewCell(_ sender: Any) {
sliderValues.insert(("\(Int(waterAmountSlider.value)) L", false), at: 0)
tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: UITableView.RowAnimation.automatic)
tableView.reloadData()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 65.0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sliderValues.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "xibcell", for: indexPath) as! TableViewCell
cell.cellWaterAmountLabel.text = sliderValues[indexPath.row].0
cell.isButtonSelected = sliderValues[indexPath.row].1
cell.backgroundColor = UIColor.groupTableViewBackground
cell.selectionStyle = .none
cell.changeHandler = { text, isOn in
sliderValues[indexPath.row] = (text, isOn)
}
return cell
}
这将是 TableView 单元格:
class TableViewCell: UITableViewCell {
var isButtonSelected: Bool = false
var changeHandler: ((String, Bool) -> Void)?
@IBOutlet weak var cellButton: UIButton!
@IBOutlet weak var cellWaterAmountLabel: UILabel!
@IBAction func cellButtonPressed(_ sender: Any) {
isButtonSelected.toggle()
let image = isButtonSelected ? UIImage(named: "enabledCheckbox") : UIImage(named: "disabledCheckbox")
cellButton.setImage(image, for: UIControl.State.normal)
changeHandler?(cellButton.titleLabel?.text ?? "", isButtonSelected)
}
}
关于swift - 每次带有启用按钮的单元格消失时,都会插入一个带有已激活按钮的新单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827494/
我是一名优秀的程序员,十分优秀!