【问题标题】:swift tableview is not reloading after deleting cell删除单元格后,swift tableview没有重新加载
【发布时间】:2017-08-15 08:10:00
【问题描述】:

我在 storyboard 中创建了 Tableview。当我尝试删除tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction] 中的单元格时,表在删除后不会立即重新加载。它也将在数据库中成功删除。 当我关闭视图并返回时,它将被更新。我哪里错了?

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {


    let deleteAction = UITableViewRowAction(style: .normal, title: "Löschen") { (rowAction, indexPath) in


            let Info: NSDictionary = self.finaltaskValue[indexPath.item] as! NSDictionary
            let pwid = Info["pwid"] as! String
            self.finaltaskValue.remove(at: indexPath.row)
            self.finalTasktableView.beginUpdates()
            self.finalTasktableView.deleteRows(at: [indexPath], with: .none)
            self.finalTasktableView.endUpdates()


            let url = URL(string: "...php")

            var request = URLRequest(url: url!)
            request.httpMethod = "POST"
            let body = "parameters"

            request.httpBody = body.data(using: .utf8)

            URLSession.shared.dataTask(with: request) { data, response, error in

                if error == nil {

                    DispatchQueue.main.async(execute: {

                        do{
                            let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary


                            guard let parseJSON = json else {
                                print("")
                                return
                            }

                           DispatchQueue.main.async(execute: {
                            self.finalTasktableView.reloadData()
                            })

                        }catch {
                            //print("Caught an error: \(error)")
                            DispatchQueue.main.async(execute: {
                                let message = "Server ist Offline! Wir arbeiten mit hochdruck dran alles zu reparieren"

                        }
                    })

                }else {

                    DispatchQueue.main.async(execute: {
                        let message = error!.localizedDescription


                }

                }.resume()
        }


    deleteAction.backgroundColor = colorDarkGreen
    return [deleteAction]
}

【问题讨论】:

  • 使用deleteRows(at后不要重新加载表格视图。此方法确实会更新 UI。顺便说一句,删除begin-/endUpdates()。两条线都没有效果。将dataTask 分派到main 线程的目的是什么? dataTask 无论如何都使用自己的线程。

标签: ios swift uitableview


【解决方案1】:

1) 您必须检查您的 tableview 从最终任务值中获取数据。 2) 请在执行删除操作时不要使用开始更新和开始结束更新方法,请用户重新加载此处显示的方法。

finaltasktableview.reloadData()

3) 我不明白你为什么在这里定义 url 请求? 4)您的请求不使用此方法的任何参数或删除逻辑参数也不包括在内。检查您的请求响应,再次填写您要删除的数据。

【讨论】:

  • 1) 是 finalTask​​tableView 从 finaltaskvalue 中获取值。 3)& 4)我在这里发送参数来删除mysql中的行(我在Query中隐藏了参数)。删除数据库成功。唯一的问题是表没有重新加载。
  • 在您的数组中删除该值?通过调试检查。也试试这个,请检查您的网点以及委托和数据源。并尝试打破出口并重新加入他们。并在您的代码中添加类名: UITableviewdelegate , UItableviewDatasource.
  • 是的,它从数组中删除。我确实打破了出口并重新加入。还是一样
【解决方案2】:

1) 我同意 finaltasktableview.reloadData() 更适合相对较小的表。

2) 你发出一个网络调用,但是第一个 DispatchQueue.main.async(execute: {

没用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多