arrays - 在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView

标签 arrays swift uitableview segue

我目前正在编写一个日记应用程序。因此,我将所有条目都列在 TableView 中。一篇日记由标题、日期、类别和实际上是字符串形式的日记内容组成。

所有条目都存储在如下数组中:

var array = [Einträge] ()

要编辑一个条目,通过点击 tableView 中的条目,将一个条目的数据传递到“DetailViewController”。我目前可以更改不同的数据,但无法将更改后的数据传递回我的 tableView。

为了显示 DetailViewController 中的条目,使用了 segue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let identifier = segue.identifier {
        switch identifier {
            case "AddEintragSegue":
                let destVC = segue.destination as! AddEintragViewController
                destVC.delegate = self
            case "Show Detail":
                let dVC = segue.destination as! DetailViewController
                if let indexPath = self.tableView.indexPath(for: sender as! UITableViewCell) {
                    dVC.eintrag = array[indexPath.row]
            }
        default: break
        }
    }

要保存更改,必须按下此按钮。我应该在以下代码中添加什么?

@IBAction func btnSafeChanges(_ sender: Any) {

    eintrag = Einträge(name: txtTitel.text!, inhalt: txtInhalt.text!, datum: txtDatum.text!, kategorie: txtKategorie.text!)

或者我应该使用另一种类型的转场?

最佳答案

您可以与一些委托(delegate)一起将数据传回

import UIKit

struct Einträge {}

protocol DetailViewControllerDelegate: class {
    func newEintragCreated(eintrag: Einträge, index: Int)
}

final class InitialViewController: UIViewController {

    var array: [Einträge] = []
    let tableView = UITableView()

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let identifier = segue.identifier {
            switch identifier {
            case "Show Detail":
                let dVC = segue.destination as! DetailViewController
                if let indexPath = self.tableView.indexPath(for: sender as! UITableViewCell) {
                    dVC.eintrag = array[indexPath.row]
                    dVC.index = indexPath.row
                    dVC.newEintragDelegate = self
                }
            default:
                break
            }
        }
    }
}

extension InitialViewController: DetailViewControllerDelegate {

    func newEintragCreated(eintrag: Einträge, index: Int) {
        // replace old object for newly created one
        array[index] = eintrag
        tableView.reloadData()
    }
}

final class DetailViewController: UIViewController {

    var eintrag: Einträge!
    var index: Int?
    weak var newEintragDelegate: DetailViewControllerDelegate?

    func btnSafeChanges() {
        let eintrag = Einträge()
        if let index = index, let delegate = newEintragDelegate {
            delegate.newEintragCreated(eintrag: eintrag, index: index)
        }
    }
}

关于arrays - 在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693866/

相关文章:

objective-c - 防止 UIScrollView 在发生触摸时停止滚动

ios - 用字典数据填充 UITableView (Swift)

python - 关于 "f-strings now support = for quick and easy debugging",如何打印 `f' {array[{i=}]= }'` ,索引也为 "="-expanded ?

arrays - 无法将 EJS 变量插入 html scripttag 中的数组?

c++ - 返回指针的方法,指向在另一个 header 中声明的数组对象,

swift - NSViewController 委托(delegate)

python - 在最后 2 个维度中旋转 5D 数组

ios - 无法将类型 '(_) -> ()' 的值分配给类型 '((String, String, String, Int) -> ())?'

swift - 菜单项左侧的复选标记

Swift 3 泛型 : issue with setting UICollectionViewDatasource & Delegate for a UICollectionView inside UITableViewCell