swift自动刷新Cell

时间:2018-04-25 11:19:12

标签: arrays swift uitableview io reload

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

或者如果在loadCart.count haw更改时如何刷新? 感谢

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
}

3 个答案:

答案 0 :(得分:0)

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

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

我认为这里列出了一个类似的用例,但是需要根据您的需求进行调整(如果您需要更多帮助,那么比我更专业的人可以帮助解决具体问题!)Automatically Reload TableViewController On Rewind

答案 1 :(得分:0)

如果我理解正确,您可以使用反应式编程。例如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)

添加

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