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
,最终更新上一个操作的效果。
因此更改getOnay
和remove(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 刷新不适用于行操作的主要内容,如果未能解决你的问题,请参考以下文章
AlamofireObjectMapper.swift 第 74 行适用于 Playground,但不适用于设备或模拟器
Swift:如何无延迟地刷新 tableview (UIRefreshControl)
如何在单击 tabBar 项目 Swift 上刷新 tableView?