我正在使用的应用程序中有一个UITableView,并且有一个按钮可添加到填充tableview的数组中。当我添加然后打开tableview时,最新的项目丢失了。我必须打开表视图,将其关闭,然后重新打开以查看最新条目。
我尝试过:
NotificationCenter.default.addObserver(self, selector: #selector(loadList), name: NSNotification.Name(rawValue: "load"), object: nil)
在tableviewcontroller中,然后在我按添加而没有运气之后调用它
我将数据源和委托设置为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
当我向数组添加新项时,Id希望能够重新加载数据
答案 0 :(得分:1)
您必须放置代码来将TableView重新加载到ViewDidAppear类中
答案 1 :(得分:-1)
我最终解决了自己的问题。我正在这样分配数组:
override func viewDidDisappear(_ animated: Bool) {
defaults.set(arrayName, forKey: "ItemNameArray")
}
所以当我加载cartTableView时它不会分配。将其移至按钮单击功能可以解决我的问题
编辑:谢谢所有答复。抱歉,我的问题最终是一个愚蠢的错误