正在小区

时间:2016-09-30 14:05:50

标签: swift uitableview protocols

我有一个带有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中的单元格。为什么要重置?如何防止它?

2 个答案:

答案 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进行复制。