[Swift IOS] Store Value UITextField trong TableView khi Scrolling ??
Khi mình lấy dữ liệu lên tableview thì bình thuờng , khi mình add vào mỗi row 1 UITextField để có thể thay đổi gia trị , khì khi mình gõ 1 vào vẫn bth nhưng khi scroll cái tableview thì xảy ra tình huống mất dữ liệu vừa gõ vào , hoac dữ liệu nó chạy xuống cuối cùng
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellTakeOffProduct = tableView.dequeueReusableCell(withIdentifier: "celltakeoff",for: indexPath) as! TakeOffVolumeCell
let productcell:Product = marrShowallProductData.object(at: (indexPath as NSIndexPath).row) as! Product
cellTakeOffProduct.lblProName.text = "Sản phẩm: \(productcell.product_name)"
cellTakeOffProduct.txtSL.tag = indexPath.row
return cellTakeOffProduct
}
Lớp Cell:
class TakeOffVolumeCell: UITableViewCell {
@IBOutlet weak var lblProName: UILabel!
@IBOutlet weak var txtSL: UITextField!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Xin Help , Thanks
1 ANSWERS
Cell được hiển thị ở UITableView được sự dụng bằng cơ chế reuse.Nghĩa là nó được sử dụng lại nhiều lần để tăng performance, bởi vì khi init 1 view mất nhiều tài nguyên. Khi bạn register cell vào tableview và ở cellForRowAt bạn dequeueReusableCell nó tức là bạn đang dùng lại nó. Tuy nhiên cell dùng lại sẽ chỉ mang dữ liệu của cell trước đó, do đó khi bạn scroll tableview thì bạn sẽ thấy dữ liệu nó bị thay đổi và ứng với cell vừa bị ẩn đi. Để keep dữ liệu ở cell thì bạn phải lưu dữ liệu của cell đó vào object và set lại cho nó ở cellForRowAt.
Bắt sự kiện didFinishEditing hoặc didEditing của textfield, update giá trị text vào productcell.product_name