代码之家  ›  专栏  ›  技术社区  ›  user9696953

swift自动刷新单元格

  •  1
  • user9696953  · 技术社区  · 6 年前

    从另一个ViewController中添加或删除 Im显示此阵列。在tableView中计数 如何在swift中自动更新阵列的单元格。计数 没有计时器和拉刷新

    或者如何在加载购物车时进行刷新。数一数零钱? 谢谢

    class TestTABLEVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var tableViewT: UITableView!
    
    var CellT = TestTableViewCell()
    var def = UserDefaults.standard
    var loadedCart = [[String:Any]]()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        tableViewT.estimatedRowHeight = 100
    
        tableViewT.dataSource = self
        tableViewT.delegate = self
    
        loadedCart = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [] 
    
       //Here need add auto update
     }
    

    行的单元格

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TestTableViewCell
    
        let item = loadedCart[indexPath.row]
        cell.nameLbl?.text = item["name"] as? String
        cell.priceLbl.text = item["price"] as? String
        cell.qntLbl.text = item["qty"] as? String
        let im = item["image"] as? NSData
        cell.PhoroUmage.image = UIImage(data: im! as Data)
    
    
    
        return cell
    }
    

    顺便说一句,单击-删除arr并重新加载单元格时

    @IBAction func Btn(_ sender: UIButton) {
        def.removeObject(forKey: "cartt")
        print("remove is OK")
      //Here need add auto update when btn pressed
    }
    
    3 回复  |  直到 6 年前
        1
  •  0
  •   Fiser33    6 年前

    如果我理解正确,您可以使用反应式编程来实现这一点。例如 Bond framework 可以这样使用:

    let todoItems: SafeSignal<[TodoItem]> = ....
    let tableView: UITableView = ...
    class TodoItemCell: UITableView Cell { ... }
    
    ...
    
    todoItems.bind(to: tableView, cellType: TodoItemCell.self) { (cell, item) in
        cell.titleLabel.text = item.name
    }
    

    使用此框架,当源数组发生任何更改时,表视图将自动重新加载。有关表视图用法的详细信息,请访问 this link

        2
  •  0
  •   nc14    6 年前

    您可能需要使用通知。i、 e.在购物车中添加新内容时发送通知。

    然后设置一个观察者,每次观察者注意到更改时,都用重载数据更新tableview。

    我认为这里列出了一个类似的用例,但需要根据您的需要进行调整(如果您需要更多帮助,可能会有比我更专业的人在细节方面提供帮助!) Automatically Reload TableViewController On Rewind

        3
  •  0
  •   Bogdan59    6 年前

    添加

        override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        if let carts = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] {
            loadedCart = carts
        }
        DispatchQueue.main.async{
            self.tableViewT.reloadData()
        }
    }