【问题标题】:Edit a tableView entry in a separate ViewController an pass back the edited data into the tableView在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView
【发布时间】:2017-04-29 09:18:22
【问题描述】:

我目前正在编写一个日记应用程序。因此,我将所有条目都列在 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!)

或者我应该使用其他类型的 segue?

【问题讨论】:

  • 您可以使用委托将数据传回表格视图控制器,并在通过后重新加载表格视图

标签: arrays swift uitableview segue


【解决方案1】:

您可以与一些委托人一起将数据传回

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)
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2014-10-14
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多