删除单元格后刷新tableView [英] refresh tableView after deleting cell

查看:75
本文介绍了删除单元格后刷新tableView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个tableView,其中包含从Firebase中填充的数据,当我单击删除按钮时,该数据已从Firebase中删除,但仍保留在我的应用程序中,直到我关闭该应用程序并重新打开它之后,它才会从tableView中删除数据.这是我设置删除功能的方法:

I have a tableView with data populated from Firebase, when I click a delete button the data is removed from Firebase but it remains on my app and it doesn't remove the data from the tableView until I close the app and reopen it. Here is how I set up the delete function:

func deletePost() {
        let uid = FIRAuth.auth()!.currentUser!.uid
        let storage = FIRStorage.storage().reference(forURL: "gs://gsignme-14416.appspot.com")
        FIRDatabase.database().reference().child("posts").child(uid).observe(.childAdded, with: { (snapshot) in

            let indexPath = self.selectedIndex

            let post = self.posts[(indexPath?.row)!] as! [String: AnyObject]
            self.key = post["postID"] as? String

            self.itemsRef = FIRDatabase.database().reference().child("posts").child(uid).child(self.key!)


        // Remove the post from the DB
        FIRDatabase.database().reference().child("books").child(self.key!).removeValue { error in
            if error != nil {
                print("error \(error)")
            }
        }

            })
        self.TableView.reloadData()
    }

这里是委托和数据源:

    func numberOfSections(in tableView: UITableView) -> Int {
            // #warning Incomplete implementation, return the number of sections
            return 1
        }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         posts.count
}

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
       self.selectedIndex = indexPath
        self.didExpandCell()
        if isExpanded && self.selectedIndex == indexPath{
            print(indexPath)
        } else{
                    }}

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        if isExpanded && self.selectedIndex == indexPath{
            return 300
        }
              return 126
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath) as! ProfileTableViewCell

        //Configure the cell
        let post = self.posts[indexPath.row] as! [String: AnyObject]
        cell.Title.text = post["title"] as? String
        cell.Author.text = post["Author"] as? String
        cell.ISBN10.text = post["ISBN10"] as? String
        return cell
    }

我试图在函数末尾添加tableview.reloaddata,但这无济于事.我在做什么错了?

I attempted to add a tableview.reloaddata at the end of the function but that doesn't help. What am I doing wrong?

推荐答案

posts数组中删除对象,然后将tableView重新加载到主队列中,然后从Firebase中删除对象.

Remove your object from posts array and then reload your tableView in main queue one you remove your object from firebase.

检查以下代码:

func deletePost() {
    let uid = FIRAuth.auth()!.currentUser!.uid
    let storage = FIRStorage.storage().reference(forURL: "gs://gsignme-14416.appspot.com")
    FIRDatabase.database().reference().child("posts").child(uid).observe(.childAdded, with: { (snapshot) in

        let indexPath = self.selectedIndex

        let post = self.posts[(indexPath?.row)!] as! [String: AnyObject]
        self.key = post["postID"] as? String

        self.itemsRef = FIRDatabase.database().reference().child("posts").child(uid).child(self.key!)


        // Remove the post from the DB
        FIRDatabase.database().reference().child("books").child(self.key!).removeValue { error in
            if error != nil {
                print("error \(error)")
            } else {
                //Here remove your object from table array
                self.posts.remove(at: indexPath?.row)
                //Reload your tableview in main queue
                DispatchQueue.main.async{
                    self.TableView.reloadData()
                }
            }
        }

    })
}

没有测试过,所以如果您仍然对上面的代码有疑问,请告诉我.

Didn't tested it so let me know if you still have issue with above code.

这篇关于删除单元格后刷新tableView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆