Ios 滚动期间重复使用TableViewCell多个EditText值

Ios 滚动期间重复使用TableViewCell多个EditText值,ios,swift,Ios,Swift,我有一个tableview,单元格的每个部分都有三个edittext并排排列。我想从用户界面输入,在给出所有值后,我点击按钮,会进行一些数学计算以给出结果 但在滚动表视图时,edittext值被重复 import UIKit class Density_Price_Calculation_TableView: UIViewController , UITableViewDelegate , UITableViewDataSource { @IBOutlet weak var Densi

我有一个tableview,单元格的每个部分都有三个edittext并排排列。我想从用户界面输入,在给出所有值后,我点击按钮,会进行一些数学计算以给出结果

但在滚动表视图时,edittext值被重复

import UIKit

class Density_Price_Calculation_TableView: UIViewController , UITableViewDelegate , UITableViewDataSource {
    @IBOutlet weak var Density_Price_Calculation_TableView: UITableView!    
    @IBOutlet weak var Gravity: UILabel!
    @IBOutlet weak var Price: UILabel!

    var phreditText = [String]()
    var densityeditText = [String]()
    var priceeditText = [String]()
    var ArrayOfCell = [Density_Price_Calculation_TableViewCell]()

    override func viewDidLoad() {
        super.viewDidLoad()
        Density_Price_Calculation_TableView.delegate = self
        Density_Price_Calculation_TableView.dataSource = self
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return Density_Price_Chemicals_MasterData.instance.getChemical_Names().count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell : Density_Price_Calculation_TableViewCell = tableView.dequeueReusableCell(withIdentifier: "density_price_calculation_cell", for: indexPath) as! Density_Price_Calculation_TableViewCell
        let chemical_names = Density_Price_Chemicals_MasterData.instance.getChemical_Names()[indexPath.row]
        cell.updateViews(chemical_names: chemical_names)
        ArrayOfCell.append(cell)
        return cell
    }

    @IBAction func btn_pressed(_ sender: UIButton) {
        var totalSize=0.00, gravity=0.0,price=0.0

        for cell in ArrayOfCell
        {
            totalSize=totalSize + (Double(cell.phreditText.text ?? "") ?? 0)
            let tempPhr=Double(cell.phreditText.text ?? "") ?? 0
            let tempDen=Double(cell.densityeditText.text ?? "") ?? 0
            let tempPrice=Double(cell.priceeditText.text ?? "") ?? 0
            if(tempPhr != 0 && tempDen != 0)
            {
                gravity=gravity + tempPhr/tempDen
            }

            price = price + (tempPhr*tempPrice)  
        }

        Gravity.text = String (format : "%.3f",(Double(totalSize/gravity)))
        Price.text = String (format : "%.3f",(Double(price/totalSize)))  
   }
}
我的TableviewCell内容

import UIKit

class Density_Price_Calculation_TableViewCell: UITableViewCell {
    @IBOutlet weak var chemical_name: UILabel!
    @IBOutlet weak var phreditText: UITextField!
    @IBOutlet weak var densityeditText: UITextField!
    @IBOutlet weak var priceeditText: UITextField!

    func updateViews(chemical_names:Density_Price_Calculation) {
        chemical_name.text = chemical_names.chemical_name
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        // Dismiss the keyboard when the view is tapped on
        phreditText.resignFirstResponder()
        densityeditText.resignFirstResponder()
        priceeditText.resignFirstResponder()   
    }   
}
导入UIKit
类别密度\价格\计算\表格视图单元格:UITableViewCell{
@IBVAR化学产品名称:UILabel!
@IBOutlet弱var phreditText:UITextField!
@IBOutlet弱var densityeditText:UITextField!
@IBOutlet弱var pricedittext:UITextField!
func更新新闻(化学名称:密度、价格、计算){
化学品名称.text=化学品名称.化学品名称
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
//点击视图时关闭键盘
phreditText.resignFirstResponder()辞职
densityeditText.resignFirstResponder()辞职
priceeditText.resignFirstResponder()辞职
}   
}


提前感谢。

这可能是因为您在
cellForRowAt
中退出表视图单元格,并在
ArrayOfCell
中维护相同的单元格,并且由于退出队列引用,可能会发生此问题。
因此,请尝试以下更改, 而不是

let cell : Density_Price_Calculation_TableViewCell = tableView.dequeueReusableCell(withIdentifier: "density_price_calculation_cell", for: indexPath) as! Density_Price_Calculation_TableViewCell
试着用

let cell = Density_Price_Calculation_TableViewCell(style: .default, reuseIdentifier: "density_price_calculation_cell")
注*
-这个过程可能会有点高性能,因为我们没有将单元格排挤出队列。

不要将单元格放在一个数组中;细胞被重复使用。您需要确保在单元格中的文本字段更改时更新数据模型,以便下次要求您使用该单元格时可以还原数据模型。不工作..打开应用程序时显示致命错误。