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



我在正在处理的应用程序中有一个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")
}

所以当我加载购物车表视图时它不会分配。将其移至按钮单击功能解决了我的问题

编辑:感谢所有回复的人。对不起,我的问题最终是一个愚蠢的错误

相关内容

最新更新