如何在UITableViewController的自定义单元格中更新用于数据的数组

时间:2018-02-15 20:01:08

标签: ios swift uitableview

我尝试在用户编辑UITableViewController中的自定义单元格中的文本字段后更新我的数组,但不确定如何处理它。现在,该过程的工作原理是,当表视图首次加载时,它会调用Firebase并获取所有数据并将其显示在表视图中。

数据Data

App

我将数据存储在[[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
        }
    }

0 个答案:

没有答案