【问题标题】:Swift 3 : TableView refresh doesn't work with row actionSwift 3:TableView 刷新不适用于行操作
【发布时间】:2017-07-24 14:16:27
【问题描述】:

我正在使用“接受”滑动操作。当我单击滑动按钮时,一切都在 Web 服务器上运行良好,但 tableView 没有得到更新。实际上我在getOnay函数中使用了tableView.reloadData(),但它不起作用。

有趣的是,当我按两次滑动操作按钮时,它会删除 tableView 上的行。

这是我的代码:

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

    let onay = UITableViewRowAction(style: .normal, title: "Accept") { action, index in
        let ip = editActionsForRowAt.row
        let taskInfo:Task = self.onayArray[ip]

        self.getOnay(id: taskInfo.id, status: "okay")

        self.onayArray.remove(at: index.row)
        self.loadOnaylar(userID: self.onayCode.userId, code: self.onayCode.systemCode)
    }
    onay.backgroundColor = .green

    return [onay]
}

【问题讨论】:

  • 可以分享一下你的loadOnaylar方法代码吗?
  • 基本上它只是一个 josn 邮政编码。我可以共享 loadOnaylar,但问题是,当我运行调试时,此函数在行操作 onay var 中根本不起作用。这怎么可能?

标签: ios swift uitableview reloaddata


【解决方案1】:

在您调用 getOnay 后调用该函数从数组 (self.onayArray.remove(at: index.row)) 中删除元素,您说它调用了 tableView.reloadData()。因此,您在从数组中删除元素之前重新加载数据。当您第二次执行滑动操作时,会调用reloadData,最终更新上一个操作的效果。

因此更改getOnayremove(at: index.row) 函数的顺序:

self.onayArray.remove(at: index.row)
self.getOnay(id: taskInfo.id, status: "okay")

【讨论】:

  • 它在 onay var 中不起作用,我不知道为什么。
  • @winnervswinner 你的getOnay(...) 函数是做什么的?
  • 这个函数里面有get json方法。发送 get 方法后,它会重新加载 tableview。
  • @winnervswinner 你实现了canEditRowAt tableview 委托方法吗(需要为你想要滑动操作的行返回true/false)?
【解决方案2】:

您是否尝试在主队列中重新加载数据()?

 DispatchQueue.main.async {
     tableView.reloadData()
 }

【讨论】:

  • 它没有用。我认为这与主队列无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多