我有一个带有textField和按钮的单元格。该按钮打开一个页面来收集数据,并有一个协议将该数据传递回单元格并填充textField。一切正常,但是,当我回来时,值被重置为零。打印语句显示它在设置时传递数据,但是由于某种原因命中Back
会将其清除。
协议
protocol DistanceProtocol {
func distanceSet(distance: Double)
}
调用协议方法
distanceProtocol?.distanceSet(totalDistance)
细胞类
class InputCell: CalculatorCell, DistanceProtocol {
@IBOutlet var textField: UITextField?
private var inputType = InputType.undefined
var viewController = UIViewController()
override func getHeight() -> CGFloat {
return 90
}
func distanceSet(distance: Double) {
print(distance)
textField?.text = "\(distance)"
}
func getInputType() -> InputType {
return inputType
}
func setInputType(inputType: InputType) {
self.inputType = inputType
}
@IBAction func walkTouched(sender: UIButton) {
let mapVc = viewController.storyboard!.instantiateViewControllerWithIdentifier("Map") as! MapLocationsViewController
mapVc.distanceProtocol = self
viewController.navigationController?.pushViewController(mapVc, animated: true)
}
}
据我所知,一切都设置正确。当我回来时,它没有重新加载tableView中的单元格。为什么要重置?如何防止它?
答案 0 :(得分:0)
仅在调用函数时设置文本字段。除非你在cellForRowAtIndex路径中调用此函数,否则它不会保留值
我可能会使用setter实现它,每次设置值时都会执行,标签会更新
-r
然后在你的cellForRowAtIndexPath调用中调用函数
protocol DistanceProtocol {
func distanceSet(distance: Double)
}
class CellWithText: UITableViewCell {
var cellText: String {
didSet {
textLabel?.text = cellText
}
}
}
extension CellWithText: DistanceProtocol {
func distanceSet(distance: Double) {
self.cellText = "\(distance)"
}
}
答案 1 :(得分:0)
我认为您可以尝试使用单例设计模式,也可以使用struct进行复制。