【发布时间】:2020-11-17 05:18:53
【问题描述】:
我有一个 tableViewCell,里面有一个范围滑块。当用户点击handleSave()时,我希望将范围滑块中的值保存到firebase。当用户在 tableViewCell 内滑动范围滑块时,我可以打印出这些值,但我不能从 tableViewCell 本身保存这个值,也不能从 tableViewVC 打印值。当我尝试从 tableViewVC 打印值时,我在控制台中看不到任何内容。但如果我要从我的 tableViewCell 本身打印它们,那么它工作得很好。
我用来尝试从 tableViewVC 打印值的代码是,
if indexPath.section == 2 {
let costRangeCell = AgeRangeCell(style: .default, reuseIdentifier: nil)
costRangeCell.rangeSlider.minimumValue = 5
costRangeCell.rangeSlider.maximumValue = 200
costRangeCell.rangeSlider.lowValue = 5
costRangeCell.rangeSlider.highValue = 200
costRangeCell.rangeSlider.minimumDistance = 20
costRangeCell.delegate = self
return costRangeCell
}
var lowCost: Double = 0.0
var highCost: Double = 0.0
func didChange(lowVal: Double, highVal: Double, forCell cell: AgeRangeCell) {
self.lowCost = lowVal
self.highCost = highVal
}
在上面的打印语句中,我可以看到用户选择的范围滑块的值。
我打算如何保存数据也在 tableViewVc 中。
@objc fileprivate func handleSave() {
guard let uid = Auth.auth().currentUser?.uid else { return }
let docData: [String: Any] = [
"minSeekingCost": lowCost,
"maxSeekingCost": highCost
]
self.updateUserDataIntoDatabseWithUID(uid: uid, values: docData as [String : AnyObject])
print("Finished saving user info")
self.dismiss(animated: true, completion: {
print("Dismissal complete")
print(lowVal)
print(highVal)
})
}
当我尝试查看此处打印的值时,它只显示 0 和 1,而不是 rangeSlider 的实际数字
protocol AgeRangeCellDelegate {
func didChange(lowVal: Double, highVal: Double, forCell cell: AgeRangeCell)
}
class AgeRangeCell: UITableViewCell {
let rangeSlider: AORangeSlider = {
let slider = AORangeSlider()
slider.stepValue = 5
slider.trackColor = GREEN_Theme
slider.addTarget(self, action: #selector(didChangeCost), for: .touchUpInside)
return slider
}()
var delegate: AgeRangeCellDelegate?
var user: User?
let lowLabel = UILabel()
let highLabel = UILabel()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
commonInit()
}
@objc func didChangeCost(_ sender: AORangeSlider) {
delegate?.didChange(lowVal: sender.lowValue, highVal: sender.highValue, forCell: self)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
当打印语句在ageRangeCell 内时,我可以成功打印范围滑块的值。但是当我尝试在 tableViewVC 内打印 rangeSliders 值时,它不起作用。我将这些信息保存到 firebase 的唯一方法是如果我可以访问它的值。我错过了什么?如果我可以在 tableViewVC 中打印语句,我就可以将它们保存到数据库中。
【问题讨论】:
-
与往常一样,单元格是显示数据的对象,仅此而已。它不是存放东西的地方。如果单元格包含修改数据源的 UI 元素,则您负责更新模型。然后从 model 中获取数据,而不是从 view 中获取数据。并且强烈建议您不要在表格视图中使用指定的初始化程序创建单元格。重复使用它们。
标签: ios swift uitableview slider