在Firebase中删除数据后如何刷新TableViewCell?

时间:2018-12-20 16:07:24

标签: swift firebase

我想通过滑动操作表删除对话后刷新对话(表格视图单元格)。

我试图在删除数据后重新加载表视图,但是它不起作用。还带有异步功能。

 // Swipe Action Sheet solution
func tableView(_ tableView: UITableView,
               trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{

    // Write action code for the Flag
    let deleteAction = UIContextualAction(style: .normal, title:  "Löschen", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
        let ref = Database.database().reference()
        ref.child("users").child((self.currentUser?.uid)!).child("conversations").child((self.items[indexPath.row].user.uid)!).removeValue()
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }
        success(true)
    })
    deleteAction.backgroundColor = .red
    return UISwipeActionsConfiguration(actions: [deleteAction])

}

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果没有任何错误,则必须在removeValue方法的完成块中重新加载数据。同样,在重新加载数据之前,您还必须从items数组中删除项目

.removeValue { error,_ in
    if error == nil {
        self.items.remove(at: indexPath.row)
        self.tableView.reloadData() // self.tableView.deleteRows(at: [indexPath], with: .automatic)
    }
    success(error == nil)
}

答案 1 :(得分:0)

要使用滑动删除行,可以使用

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            items.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)
        } 
    }

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

    return true
}

并且因为您没有重新加载表视图,所以看起来会好得多