在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView
Posted
技术标签:
【中文标题】在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView【英文标题】:Edit a tableView entry in a separate ViewController an pass back the edited data into the 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?
【问题讨论】:
您可以使用委托将数据传回表格视图控制器,并在通过后重新加载表格视图 【参考方案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)
【讨论】:
以上是关于在单独的 ViewController 中编辑 tableView 条目,并将编辑后的数据传回 tableView的主要内容,如果未能解决你的问题,请参考以下文章
如何在单独的 ViewController 中在 iOS 中制作弹出/对话框视图?
从标签栏控制器打开带有后退按钮的单独 ViewController
C#:在winform上使用定时器来改变图表,定时器需要单独的方法,图表数据不能从单独的方法中编辑
Swift 2 - 无法在单独的 ViewController 中加载 UIWebView
你如何将数据从 ViewController 传递到包含单独 ViewController 的 PageViewController,然后这些 ViewController 将使用这些数据?