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()
}
}
我从另一个 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()
}
}