我在另一个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
}
答案 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()
}
}