我尝试在用户编辑UITableViewController中的自定义单元格中的文本字段后更新我的数组,但不确定如何处理它。现在,该过程的工作原理是,当表视图首次加载时,它会调用Firebase并获取所有数据并将其显示在表视图中。
我将数据存储在[[String:Any]]
中,并在将数据放入各自的单元格时迭代它。它是2个自定义单元格,其中1具有文本字段,另一个具有文本字段和图像视图。当我允许用户编辑任一单元格的备注部分时,我不知道如何更新数据。我试过,可能错误地实现了解决方案,使文本字段成为委托并调用textFieldDidEndEditing
但它没有用。我不知道如何处理或如何解决我的问题。
这是我在切换表格视图的编辑模式时到目前为止所拥有的
var tableData = [[String:Any]]()
@IBAction func editTable(_ sender: UIButton) {
tableView.setEditing(!tableView.isEditing, animated: true)
if tableView.isEditing {
tableView.reloadData()
}
if !tableView.isEditing {
guard let userID = userData?.userID, let selectedCity = userData?.currentCitySelection, let section = currentSectionString else { return }
let deleteInfo = Database.database().reference().child("Users").child(userID).child("Cities").child(selectedCity).child(section)
deleteInfo.removeValue()
let count = tableData.count
for idx in 0...count - 1 {
let idxString = String(idx)
let firebaseDB = Database.database().reference().child("Users").child(userID).child("Cities").child(selectedCity).child(section).child(idxString)
let values = tableData[idx]
firebaseDB.updateChildValues(values, withCompletionBlock: { ( err, ref) in
if err != nil {
print(err)
return
}
})
}
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let imageCheck = tableData[indexPath.row]["Image"] {
let cell = tableView.dequeueReusableCell(withIdentifier: "imageNotesData", for: indexPath) as! ImageNotesCell
cell.notes.text = tableData[indexPath.row]["Notes"] as! String
guard let imageFirebasePath = tableData[indexPath.row]["Image"] else {
return cell }
let pathReference = Storage.storage().reference(withPath: imageFirebasePath as! String)
pathReference.getData(maxSize: 1 * 1614 * 1614) { data, error in
if let error = error {
print(error)
} else {
let image = UIImage(data: data!)
cell.storedImage.image = image
}
}
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "notesData", for: indexPath) as! NotesCell
let noteString = tableData[indexPath.row]["Notes"] as! String
cell.notes.text = tableData[indexPath.row]["Notes"] as! String
if tableView.isEditing {
cell.notes.isEditable = true
} else {
cell.notes.isEditable = false
}
return cell
}
}