2017-05-07 5 views
0

Ich habe benutzerdefinierte UITableViewCell mit Textfeld darin. Das Problem ist, nachdem ich einen Text im ersten Textfeld eingegeben habe (zum Beispiel), dass dieser Text in anderen Zellen dupliziert wird, nachdem ich TableView durchgeblättert habe. Ich weiß, dies passiert, weil TableView die Zellen aus der Warteschlange nimmt.
Was ist der richtige Weg, um mit diesem Problem umzugehen?
Mein Code:
Duplizieren von Daten während Scroll-TabelleView

@IBOutlet weak var tableView: UITableView! 

     var dataArray: [String] = [] 

     override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.dataSource = self 

     for i in 0...50 { 
      dataArray.append("Elemnt # \(i)") 
     } 
     } 
    } 

    extension ViewController: UITableViewDataSource { 
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return dataArray.count 
     } 

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 
     return cell 

    } 

Antwort

1

rechts, nachdem Sie die Zelle in Ihrer -tableView:cellForRowAtIndexPath: Methode aus der Warteschlange entfernt, können Sie das zugehörige Textfeld zugreifen und sie löschen.

Alternativ, wenn Sie UITableViewCell unterklassifiziert haben, können Sie prepareForReuse() Methode in der Unterklasse überschreiben und das gleiche tun.

+0

Danke. Ich werde versuchen, Ihre Lösung – makedonskii

1

1. Sie benötigen einen separaten Array mit anfänglichen Textwert zu erstellen:

var stringArray:[String] = ["", "", "", ""] 
  1. Assign Wert in cellForRowAtIndexPath

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 
    
    cell.textfield.text = stringArray[indexpath.row] // change your swift syntax 
    

3 bis TextField-. Ersetzen Sie diesen Anfangswert in textFieldDidEndEditing.

func textFieldDidEndEditing(_ textField: UITextField) { 
      let buttonPosition:CGPoint = textField.convert(CGPointZero, 
      to:self.tableView) 
      let indexPath = self.tableView.indexPathForRow(at: buttonPosition) 
      stringArray[indexPath.row] = textField.text 
      println(allCellsText) 
      self.tableView.reloadData() // or you can reload specific cell 
     } 
    } 
+0

funktioniert das? – KKRocks