Swift自动刷新单元格



我从另一个ViewController中添加或删除我在tableview中显示此数组。在Swift中,我如何自动更新array.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
}

如果我正确理解您,则可以为此使用反应性编程。例如,可以像这样使用债券框架:

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
}

使用此框架,当源数组发生任何更改时,您的表视图将自动重新加载。您将在此链接上的表视图上找到有关用法的更多信息。

您可能需要使用通知。即,当新事物添加到购物车中时,请发送通知。

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

我认为在这里列出了类似的用例,但需要适应您的需求(如果您需要更多的帮助我的专业人士,我将能够提供更多的详细信息!p>

add

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

最新更新