Yêu cầu thg 10 23, 2017 8:30 SA 354 0 1
  • 354 0 1
0

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

Chia sẻ
  • 354 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

thg 10 25, 2017 5:50 SA

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

1 CÂU TRẢ LỜI


Đã trả lời thg 10 24, 2017 2:04 SA
+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.

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí