UPDATE:如何從一個UITableView刪除行編程和更新UI
我發現它在更新前UITableView
了長達10秒的原因。它與我發送給我的服務器的HTTP POST請求有關。下面是我閱讀所有答案和在線搜索後的代碼。原因是要放置變量index
,indexPath
和呼叫self.tableView(tableView: UITableView UITableView, commit: UITableViewCellEditingStyle, forRowAt: IndexPath)
。
如果我將它們移動到task
閉包之外,它們立即執行,但我不希望它們在外面,因爲在刪除之前我需要從服務器上「確定」。
問題不在服務器響應時間,因爲我立即得到響應。我認爲這與我不太熟悉的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
不刷新,所以雖然我不能相互作用的細胞保持可見以任何方式。
你在做主線程嗎? – JackRobinson
即使使用tableview.ReloadData()之後? –
您需要將'self.tableView.reloadData()'添加到您的代碼中 –