我正在编写日记应用程序。因此,我在tableView中列出了所有条目。一个日记条目包括标题,日期,类别,实际上日记内容为字符串。
所有条目都存储在这样的数组中:
var array = [Einträge] ()
要编辑一个条目,一个条目的数据将传递给" DetailViewController"通过点击tableView中的条目。我目前能够更改不同的数据,但我无法将更改的数据传回我的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?
答案 0 :(得分:0)
您可以与某位代表一起将数据传回
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)
}
}
}