Asked Oct 23rd, 2017 8:30 AM 210 0 1
  • 210 0 1
0

[Swift IOS] Store Value UITextField trong TableView khi Scrolling ??

Share
  • 210 0 1

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

Oct 25th, 2017 5:50 AM

Bắt sự kiện didFinishEditing hoặc didEditing của textfield, update giá trị text vào productcell.product_name

0
| Reply
Share

1 ANSWERS


Answered Oct 24th, 2017 2:04 AM
+5

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.

Share