Ios 滚动期间重复使用TableViewCell多个EditText值
我有一个tableview,单元格的每个部分都有三个edittext并排排列。我想从用户界面输入,在给出所有值后,我点击按钮,会进行一些数学计算以给出结果 但在滚动表视图时,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
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")
注*
-这个过程可能会有点高性能,因为我们没有将单元格排挤出队列。不要将单元格放在一个数组中;细胞被重复使用。您需要确保在单元格中的文本字段更改时更新数据模型,以便下次要求您使用该单元格时可以还原数据模型。不工作..打开应用程序时显示致命错误。