2017-06-25 3 views
0

1回目にスクロールアップまたはダウンする値が1回目に間違った値に変更されるたびに、正しい値が表示されますが、スクロール後は毎回変更されます。テーブルビューのセルのラベルがスクロールした後に変更され、間違った値を取得して解決する方法はありますか?

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    //creating a cell using the custom class 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ShowPercentageAttandanceTableViewCell 




    cell.rollNo.text = String(describing: self.mainArrayRoll[indexPath.row]) 


     var location = Int() 

     for item in self.rollPercentage { 
      if item.rollCall == indexPath.row { 
       location = item.absentCount 
       cell.percentage.text=String(location) 
       } 

      else if cell.percentage.text==("Label") 
      { 

       cell.percentage.text=String("0") 
      } 

    } 


    return cell 
    } 

ここにコードがあります。

[![ここで画像2のラベルはテキスト= 2で、灰色のラベルはテキスト0ですが、画像2 [![画像2のラベルはスクロール後に変更されますが、 2] [2]

enter image description here

+0

を '; 'indexPath.row'でインデックスされた配列からテーブルのデータにアクセスする必要があります – Paulw11

+1

古典的なセルの再利用の問題。場合によっては 'else'節が' 'Label ''であるかどうかをチェックしているので、再利用されたセルの '' cell.percentage.text''を設定していません。 'else {cell.percentage.text =" 0 "}'を試してください。 – vacawama

+0

@vacawamaあなたが言ったことを試しましたが、すべてのラベルが0として表示されます。どうしてか分かりません。 –

答えて

2

[]間違っ示すあなたは、あなたが探していた値を見つけられませんでしたし、あなたは再利用のセルを持っていたとき"0"cell.percentage.textを設定するために失敗しています。

この試してみてください:あなたは(で:)cellForRow `で` for`ループを持つべきではありません

if let item = self.rollPercentage.first(where: { $0.rollCall == indexPath.row }) { 
    location = item.absentCount 
    cell.percentage.text = String(location) 
} else { 
    cell.percentage.text = "0" 
} 
+0

@ vacawama brother !!!あなたはこれがすごいことを知っています。実際に私はこの解決策がどれほど貴重なのかを言葉で伝えることはできません。あなたはちょうどAaawwwsomeです。とても仲良くありがとう! –

+0

あなたはプラティックを歓迎します。お役に立てて嬉しいです。 – vacawama

関連する問題