Swift 3:TableView 刷新不适用于行操作

Posted

技术标签:

【中文标题】Swift 3:TableView 刷新不适用于行操作【英文标题】:Swift 3 : TableView refresh doesn't work with row action 【发布时间】: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 中根本不起作用。这怎么可能? 【参考方案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()
 

【讨论】:

它没有用。我认为这与主队列无关。

以上是关于Swift 3:TableView 刷新不适用于行操作的主要内容,如果未能解决你的问题,请参考以下文章

iOS 拉动刷新不适用于 iPhone X 等特定设备

AlamofireObjectMapper.swift 第 74 行适用于 Playground,但不适用于设备或模拟器

Swift:如何无延迟地刷新 tableview (UIRefreshControl)

如何在单击 tabBar 项目 Swift 上刷新 tableView?

Swift 3:Tableview 选择行转到不同的导航视图

Mixpanel 不适用于 swift