2017-09-04 7 views
0

私は長いテキストフィールドを持っていますので、tableViewを使用しています。私は細胞の一つにテキストフィールドにテキストを挿入し、他のいくつかのセルが同じテキストフィールドの値を取得し、スクロールダウンスウィフトテーブルビューは、1つのセルが編集されたときにランダムセルの値を変更します。

this is how the screen looks like

。なぜこれが起こるのか分かりません。

これが今の私のコードです:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! RelatieToevoegenCell 
    cell.label.text = items[indexPath.row] 
    cell.textfield.placeholder = items[indexPath.row] 
    return cell 

} 
+0

テキストフィールドの編集はどのように処理しますか?もっと文脈を提供してください。 –

+0

@DávidPásztor私はテキストフィールドで何もしていない瞬間、私はちょうど彼らの1つを入力し、differrentセルの他のテキストフィールドは、私が下にスクロールすると同じテキストを取得 –

答えて

1

あなたの主な問題は、ビュー(UITableVieCell)内のデータを維持しているです。

セルは、パフォーマンスを最適化するためにUITableViewによって再利用されるため、テーブルに1ミリオンの行があっても、メモリ内にはほとんど(通常は画面上に表示される数のUITableViewCellだけ)メモリがあります。

dequeueReusableCellを呼び出すときには、既に存在するセルの1つを取り出して再利用します。

この問題を解決するには、データをArray内に別々に保存し、そこに変更されたテキストを保持する必要があります。 その後、投稿したコードを変更して、 "dataSource"からUITableViewを設定するたびにデータを取得する必要があります。

また、再利用時にUITableViewCellをリセットすることをお勧めします。prepareForReuseの中にコードを追加することでこれを行うことができますが、データソースからテキストが設定されるためオプションです。

私はまた、あなたがさらにコーディングを開始する前にこれを読むことをお勧めします - それはのUITableViewは、iOSの上でどのように機能するかを理解することができるようになります:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1

0

基本的に、あなたは[表示] - の値を取得し、保存する必要がなぜならUITableViewCellという再利用可能な振る舞いのために、すべての子参照を使って目に見えないセルの参照を失ったからです。

textViewDidChangeアクションによってテキストフィールドの値をRelatieToevoegenCellクラスに保存することができます。

関連する問題