2017-01-24 5 views
0

私は現在、自分のプロジェクトにTableViewを持っています。これは、押したときにセルを緑色にし、もう一度押すとクリアします。ただし、テーブルビューの一番下までスクロールしてスクロールして戻すと、すべてのセルがデフォルトのクリアカラーにリセットされています。UITableViewCellスタイリングをオフにスクロールして表示に戻すとき

この問題の修正方法については、SwiftではなくObjective-Cに記載されているのでわかりません。これについてどうやって行くかについての助けや助言はすばらしいでしょう、ありがとう。

+1

あなたが試したことを教えてください –

+0

私はまだ学んでいますし、私がしたことは他人の投稿を閲覧して何をすべきかを見つけ出していますが、この事件の理由や解決策を考える –

+1

@Ethan、選択したセルインデックスをキャッシュする方法は?そのためには、配列内のセルインデックスを保持する必要があります。 didSelectRowAtIndexPath - 存在しない場合は、配列にインデックスを追加する必要があります。すでに存在する場合は、配列からセルインデックスを削除します。 "cellForRowAtIndexPath"セルインデックスが選択されているかどうか確認します。 –

答えて

1

UITableViewCellが画面外に出るたびに、tableViewController/ViewControllerに書き込んだ関数が再び実行されます。

たとえばcellForRowAtIndexPathにcell.setUpCell()などがある場合は、値を元の値に戻して再設定します。あなたはMainVC

VAR名=テスト名を持っていて、あなたの携帯で何かを更新した場合

は、あなたもあなたのmainVcで名前を変更する必要があります。

1

スクロールまたはtableView.reloadData()の呼び出しを行うたびに、UITableViewセルがリロードされます。そのため、UITableViewCellを選択するたびに、didSelectRowAt indexPath:デリゲートの配列(例:selectedIndexArray)に選択したインデックス(indexPath.row)を追加します。選択したセルが既に選択されている場合は、selectedIndexArrayからセルを削除します。

cellForRowAt indexPath:selectedIndexArrayを使用してセルを管理します。

var selectedIndexArray:[Int] = [] //to save selected tableViewCells 

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

    let isSelected = false 
    for each in selectedIndexArray 
    { 
     if each == indexPath.row 
     { 
      isSelected = true 
     } 
    } 

    if isSelected == true 
    { 
     //set selected cell color 
    } 
    else 
    { 
     //set default cell color 
    } 
} 

didSelectRowAt indexPath:のセルインデックスの追加と削除のロジックを記述する必要があります。

関連する問題