我在正在处理的应用程序中有一个UITableView,我有一个按钮可以添加到填充表视图的数组中。当我添加然后打开表格视图时,缺少最新的项目。我必须打开表格视图,关闭它,然后重新打开它以查看最新的条目。
我试过:
NotificationCenter.default.addObserver(self, selector: #selector(loadList), name: NSNotification.Name(rawValue: "load"), object: nil)
在表视图控制器中,然后在我按添加后调用它,但没有运气
我将数据源和委托设置为自我,这已被推荐给我,但仍然没有运气
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
}
以上是我的购物车视图控制器
我希望能够在向数组添加新项目时重新加载数据
你必须把代码女巫重新加载表视图到ViewDidAppear类中
我最终解决了自己的问题。我像这样分配数组:
override func viewDidDisappear(_ animated: Bool) {
defaults.set(arrayName, forKey: "ItemNameArray")
}
所以当我加载购物车表视图时它不会分配。将其移至按钮单击功能解决了我的问题
编辑:感谢所有回复的人。对不起,我的问题最终是一个愚蠢的错误