swift 自动刷新单元格

swift auto refresh Cell

我从另一个 ViewController 添加或删除 我在 tableView 中显示这个 array.count 如何在 swift 中自动更新 array.count 的单元格? 没有定时器和拉动刷新

或者当loadedCart.count 发生变化时如何刷新? 谢谢

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
}

Btn,单击时 - 删除 arr 并重新加载单元格

@IBAction func Btn(_ sender: UIButton) {
    def.removeObject(forKey: "cartt")
    print("remove is OK")
  //Here need add auto update when btn pressed
}

您可能需要使用通知。即当新商品添加到您的购物车时发送通知。

然后设置一个观察者,每次观察者注意到变化时,用重新加载数据更新表视图。

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

如果我没理解错的话,你可以使用响应式编程。例如 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
}

使用此框架,您的 table 视图将在源数组发生任何更改时自动重新加载。您可以在 this link.

找到更多关于 table 视图使用情况的信息

添加

    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()
    }
}