2017-04-19 7 views
0

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

+0

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

Antwort

0

Wahrscheinlich in EditEventsTableViewController Sie vermisst Tabellenansicht Reloadi ng?

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.reloadData() 
    txtEditTitle.text = eventsArray[index!].title 
} 

Es ist unklar, wo Sie die Daten für EditEventsTableViewController liefern. Ist es eine statische Tabellenansicht, die im Storyboard entworfen wurde?

Verwandte Themen