gpt4 book ai didi

swift - UITableView 不刷新,除非关闭然后重新打开

转载 作者:行者123 更新时间:2023-11-28 07:29:18 29 4
gpt4 key购买 nike

我在我正在处理的应用程序中有一个 UITableView,我有一个按钮可以添加到填充表格 View 的数组中。当我添加然后打开 tableview 时,最新的项目丢失了。我必须打开 tableview,关闭它,然后重新打开它才能查看最新的条目。

我试过:

    NotificationCenter.default.addObserver(self, selector: #selector(loadList), name: NSNotification.Name(rawValue: "load"), object: nil)

在 tableviewcontroller 中,然后在我按添加但没有成功后调用它

我将数据源和委托(delegate)设置为 self,这已经被推荐给我,但仍然没有成功

override func viewDidAppear(_ animated: Bool) {
DispatchQueue.main.async{
self.cartTableView.reloadData()
}
}

override func viewDidLoad() {
super.viewDidLoad()

self.view.backgroundColor = UIColor(red:0.08, green:0.08, blue:0.08, alpha:1.0)
tableView.layoutMargins = UIEdgeInsets.zero
tableView.separatorInset = UIEdgeInsets.zero
tableView.separatorColor = UIColor(red:0.70, green:0.70, blue:0.70, alpha:1.0)


items = defaults.array(forKey: "ItemNameArray") as! [String]
categories = defaults.array(forKey: "ItemCatArray") as! [String]
sizes = defaults.array(forKey: "ItemSizeArray") as! [String]
colors = defaults.array(forKey: "ItemColorArray") as! [String]

if items.isEmpty == true{
items = [""]
categories = [""]
sizes = [""]
colors = [""]
}
cartTableView.register(UINib.init(nibName: "CartCell", bundle: nil), forCellReuseIdentifier: "CartCell_Identifier")

cartTableView.delegate = self;
cartTableView.dataSource = self;


}

@objc func loadList(notification: NSNotification){
//load data here
self.tableView.reloadData()
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return(items.count)
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = cartTableView.dequeueReusableCell(withIdentifier: "CartCell_Identifier") as! CartCell
cell.lblItemName.text = items[indexPath.row]
if colors[indexPath.row] != ""{
cell.lblItemInfo.text = ("Color - " + colors[indexPath.row] + " | " + "Size - " + sizes[indexPath.row] + " | " + "Category - " + categories[indexPath.row])
}else{
cell.lblItemInfo.text = ("")

}

return(cell)
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCell.EditingStyle.delete{
items.remove(at: indexPath.row)
sizes.remove(at: indexPath.row)
categories.remove(at: indexPath.row)
colors.remove(at: indexPath.row)

defaults.set(items, forKey: "ItemNameArray")
defaults.set(categories, forKey: "ItemCatArray")
defaults.set(sizes, forKey: "ItemSizeArray")
defaults.set(colors, forKey: "ItemColorArray")
DispatchQueue.main.async{
self.cartTableView.reloadData();
}
}
}


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 65
}

上面是我的 CartViewController

我希望能够在我向数组添加新项时重新加载数据

最佳答案

您必须将重新加载 TableView 的代码放入 ViewDidAppear 类中

关于swift - UITableView 不刷新,除非关闭然后重新打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55433766/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com