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

时间:2019-03-30 17:06:16

标签: swift xcode uitableview

我正在使用的应用程序中有一个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希望能够重新加载数据

2 个答案:

答案 0 :(得分:1)

您必须放置代码来将TableView重新加载到ViewDidAppear类中

答案 1 :(得分:-1)

我最终解决了自己的问题。我正在这样分配数组:

override func viewDidDisappear(_ animated: Bool) {
    defaults.set(arrayName, forKey: "ItemNameArray")
}

所以当我加载cartTableView时它不会分配。将其移至按钮单击功能可以解决我的问题

编辑:谢谢所有答复。抱歉,我的问题最终是一个愚蠢的错误