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