2017-01-17 36 views
0

私のアプリに問題があります。私はすべてのセルがテキストフィールドで構成されているテーブルビューを持っています。私がそれを書き込んでスクロールダウンすると、スクロールアップするよりも、私が書き込んだデータは消えます。Tablet - SwiftをスクロールするとUItextFieldデータが消えます

あなたが見ることができるように、これらは私の機能の一部の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 
} 
} 

あり、私は配列にテキストフィールドでの私の書かれたテキストのすべてを保存しています。どんな助けもありがとう。

ありがとうございます。

答えて

3

再度スクロールすると、tableView(tableView: cellForRowAt:)が再び呼び出されます。このメソッドの中では、呼び出されるたびにカウントが増加するため、最初の条件を使用する代わりに、より大きい数値のcell.TextField.text = ""を設定する2番目の条件文に移動します。あなたは何のためにcountを使っていますか?たぶん、あなたがその部分を少し上手くコーディングする方法を再考するかもしれない。

+0

配列内の要素にアクセスしようとするとバウンスエラーが発生するため、カウントが増加します。 – jim

+1

おそらく 'indexPath.row TheAmateurProgrammer

+0

ありがとうございました! – jim

1

セルは再作成されます。だからあなたはそれらを失う。 PrepareForReuseメソッドを使用して、再作成時にテキストを元に戻すことができます。

+0

私はその方法をもう少し詳しく教えてもらえますか?私はその方法を見つけることができません – jim

関連する問題