[英]How do I delete a row from a UITableView programmatically and update the UI
更新:
我发现了更新UITableView
之前最多需要 10 秒的原因。 它与我发送到我的服务器的 HTTP POST 请求有关。 以下是我在阅读所有答案并在线搜索后截至目前的代码。 原因是变量index
、 indexPath
以及对self.tableView(tableView: UITableView UITableView, commit: UITableViewCellEditingStyle, forRowAt: IndexPath)
。
如果我将它们移到task
关闭之外,它们会立即执行,但我不希望它们移到外面,因为在删除之前我需要服务器的“OK”。
问题不在于服务器响应时间,因为我立即得到响应。 我认为这与我不太熟悉的task.resume()
有关。
foreach expense in expenses {
var request = URLRequest(url: URL(string: Constants.ZEBON_SERVER_URL)!)
request.httpMethod = "POST"
let postString = "date=\(expense.date)&amount=\(expense.amount)¬e=\(expense.desc)"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) {
(data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
print("error = \(error)")
}
// If the server responds with "OK" (the request was received) then delete the expense
if responseString?.range(of:"return\":\"ok") != nil {
let index = self.expenses.index(of: expense)
let indexPath = IndexPath(row: index!, section: 0)
// Deletes the expense
self.tableView(self.tableView, commit: .delete, forRowAt: indexPath)
}
else {
// TODO: Implement error handling.
}
}
task.resume()
}
原问题:
我有一些显示在UITableView
对象。 当我按下一个按钮时,它们被发送到服务器并且应该从 tableView 中删除。
我当前的代码如下所示:
let index = self.expenses.index(of: expense)
let indexPath = NSIndexPath(row: index!, section: 0)
self.expenses.remove(at: indexPath.row)
// Saves the array 'Expenses' to persistent storage.
self.saveExpenses()
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath as IndexPath], with: .none)
self.tableView.endUpdates()
我的问题是费用被发送到服务器并从存储中删除,但UITableView
不会刷新,因此当我无法以任何方式与其交互时,单元格保持可见。
更新 UI后保存数组。
实际上这些行就足够了, begin/endUpdates()
对单个删除操作没有影响。
let index = self.expenses.index(of: expense)
let indexPath = IndexPath(row: index!, section: 0)
self.expenses.remove(at: index!)
DispatchQueue.main.async {
self.tableView.deleteRows(at: [indexPath], with: .none)
}
// Saves the array 'Expenses' to persistent storage.
self.saveExpenses()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.