Ich versuche, die Tabellenzeile Zelle zu bearbeiten. Ich habe verschiedene tableViewController eingerichtet, um die aktuellen Ereignisse anzuzeigen/zu bearbeiten, wenn sie auf die angezeigten Ereignisse von initial TableViewController berühren. Immer wenn ich ein Ereignis bearbeite und auf Speichern klicke, kehrt es zum Haupt-ViewController zurück, wo ich meine Ereignisse anfange, aber es zeigt die bearbeiteten Ereignisse nicht an. es zeigt weiterhin die ursprünglichen Ereignisse. HierEditing Tabellenzeile Zelle Swift 3
ist der Teil meiner Haupttableview-Datei, wo ich meine Ereignisse bin Anzeige:
class EventsTable: UIViewController, UITableViewDataSource, UITableViewDelegate {
var tableData = ViewController()
@IBOutlet weak var table: UITableView!
@IBAction func saveToMainViewController (change:UIStoryboardSegue) {
let editViewController = change.source as! EditEventsTableViewController
let index = editViewController.index
let titleString = editViewController.editedTitle
tableData.eventsArray[index!].title = titleString
table.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return tableData.eventsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomeCell
cell.eventTitle.text = tableData.eventsArray[indexPath.row].title
cell.eventLocation.text = tableData.eventsArray[indexPath.row].location
cell.eventDateAndTime.text = tableData.eventsArray[indexPath.row].date
return cell
}
//function to delete cell and saves it
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
tableData.eventsArray.remove(at: indexPath.row)
table.reloadData()
let savedEvents = NSKeyedArchiver.archivedData(withRootObject: tableData.eventsArray)
UserDefaults.standard.set(savedEvents, forKey: "savedEvents")
UserDefaults.standard.synchronize()
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "edit" {
var path = table.indexPathForSelectedRow
let detailViewController = segue.destination as! EditEventsTableViewController
detailViewController.index = path?.row
detailViewController.eventsArray = tableData.eventsArray
}
}
Hier sind die anderen Tableviewcontroller, wo ich meine Daten bearbeiten
class EditEventsTableViewController: UITableViewController {
@IBOutlet weak var txtEditTitle: UITextField!
var index:Int!
var eventsArray = [Event]()
var editedTitle: String!
override func viewDidLoad() {
super.viewDidLoad()
txtEditTitle.text = eventsArray[index!].title
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 0 && indexPath.row == 0 {
txtEditTitle.becomeFirstResponder()
}
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "save" {
editedTitle = txtEditTitle.text
}
}
}
einhüllen euch einen besseren brauchen Schauen Sie sich das Projekt an, download link für das Projekt
Ich empfehle, ein bestimmtes 'Event' - das muss eine Klasse sein - an den Edit Controller zu übergeben und die Änderungen direkt im Objekt vorzunehmen. Dann gehe zurück und lade die Tabellenansicht neu. Aufgrund der Referenzsemantik bleiben die Änderungen bestehen. – vadian