2017-01-17 8 views
0

Ich habe Probleme mit meiner App. Ich habe eine Tabellenansicht, in der jede Zelle aus einem Textfeld besteht. Wenn ich darin schreibe und nach unten scrolle, dann zurück scrolle, verschwinden die Daten, die ich darin geschrieben habe.UItextField-Daten verschwinden, wenn ich durch den TableView blättern - Swift

Dies sind einige meiner Funktionen in Viewcontroller

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate, UIScrollViewDelegate { 

    var arrayOfNames : [String] = [String]() 
    var rowBeingEdited : Int? = nil 

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return initialNumberOfRows 
    } 

    var count: Int = 0; 
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell 



     if(arrayOfNames.count > 0 && count < arrayOfNames.count) { 
      cell.TextField.text = self.arrayOfNames[indexPath.row] 
     }else{ 
      cell.TextField.text = "" 
     } 

    count += 1 



     cell.TextField.tag = indexPath.row 
     cell.TextField.delegate = self 
     return cell 
    } 

func textFieldDidEndEditing(_ textField: UITextField) { 
    let row = textField.tag 
    if row >= arrayOfNames.count { 
     for _ in ((arrayOfNames.count)..<row+1) { 
      arrayOfNames.append("") // this adds blank rows in case the user skips rows 
     } 
    } 

    arrayOfNames[row] = textField.text! 
    rowBeingEdited = nil 

} 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    rowBeingEdited = textField.tag 
} 
} 

Wie Sie sehen können, bin ich alle meine geschriebenen Text in das Textfeld in ein Array zu speichern. Jede Hilfe wäre willkommen.

Vielen Dank im Voraus

Antwort

3

Wenn Sie zurück scrollen tableView(tableView: cellForRowAt:) wird erneut aufgerufen. Innerhalb dieser Methode inkrementieren Sie die Zahl jedes Mal, wenn sie aufgerufen wird, also statt die erste Bedingung zu verwenden, geht sie zu der zweiten bedingten Anweisung, die cell.TextField.text = "" setzt, da der Wert wahrscheinlich größer als arrayOfNames.count ist. Was verwendest du für count? Vielleicht überlege, wie du diesen Teil ein wenig besser programmieren könntest.

+0

Anzahl erhöht wird, weil ich bekomme einen Bounce-Fehler für den Zugriff auf ein Element in meinem Array – jim

+1

statt vielleicht 'indexPath.row TheAmateurProgrammer

+0

Danke, das hat funktioniert! – jim

1

Sie Zellen werden neu erstellt. Also verlierst du sie. Sie können die Methode PrepareForReuse verwenden, um den Text beim erneuten Erstellen festzulegen.

+0

Können Sie mich ein wenig mehr auf, wie man das tun? .. Ich kann nicht finden, dass diese Methode – jim

Verwandte Themen